ソースのハイライト
lessにはLESSOPENという環境変数があります。
これはLESSがファイルを開くときに、設定した値をフィルタプログラムとして起動することでlessする内容を変化させられるっつーものです。例えば、圧縮ファイルなどは解凍した結果を出力させるなんていうスクリプトなんかを使ってる人もいるようです。
GNUのsource-hightlightには、LESSOPEN用のsrc-hilite-lesspipe.sh
というスクリプトが用意されています。
LESSOPENに '| /usr/share/source-highlight/src-hilite-lesspipe.sh %s'
という値をセットしてあげることで、source-highlightを通した結果を出力することが出来るようになります。
また、この設定をする場合はlessに-R
または --RAW-CONTROL-CHARS
というオプションをつけてあげましょう。これについては後述します。
画面に結果を残したい、そして一画面に収まる時はcatの様に動作させたい
環境変数LESS
に値を登録しておくことで、常に使用したいオプションを設定することが出来ます。LESSはページャとして設定して、自動的に起動させたりするような感じがあったりすると思うので、エイリアスだけじゃあなくてこっちで設定出来るようになってるんじゃあないかと思います。
表題の条件を満たすには
--no-init --quit-if-one-screen
を設定します。
--no-init
は、よくわからないですがtermcap初期化文字列を送信しないようにする——ということだそうです。つまりlessを終了しても、表示させていた画面がそのまま残るということです。
--quit-if-one-screen
はそのままの意味です。
ちなみに--quit-if-one-screen
だけだと、一画面の時はただ起動した後に即終了するだけになります。
画面に残すのは嫌だけど、cat的動作はさせたい! という場合はawkとか使ってどうにかするしかないと思います。でもまぁ、常に残った方が便利だと思います。
色の表示
先ほどの--RAW-CONTROL-CHARS
も設定しましょう。
これを設定しないと、カラーエスケープシーケンスがそのまま出力されることになります。
これを設定しておくことでカラー表示をパイプさせた場合や、先ほどのsource-hightlight、あとはgit logなどの出力結果をカラーで出力させることが出来るようになります。
おまけ
他にも僕は-g
-j10
を登録しています。
lessは標準動作では、単語検索時当てはまる全ての単語が反転表示されますが、-g
をつけると現在フォーカスのあるもののみが反転表示されるようになります。
-j(数字)
は、検索時に、ターゲットフォーカスの存在する行数です。すごく説明しにくいのですが、-j10
としておくと、検索した語が上から10行目に表示(それぞれの環境にもよりますが、大体真ん中よりもちょっと上目)されるので見やすいです。
まとめ
最終的に設定する環境変数は
LESS='-gj10 --no-init --quit-if-one-screen --RAW-CONTROL-CHARS
LESSOPEN='| /{環境ごとにディレクトリが違うよ}/src-hilite-lesspipe.sh %s'
になると思います。
lesspipeは、
Macでhomebrewなら/usr/local/bin/
Linuxでdebian系なら多分/usr/share/source-highlight/
cygwinなら/bin/
にそれぞれ存在するかと思います。他は使っていないので知りません。