More info...

2011-11-10

lessでソースコードに色をつける

シェルの操作中「テキストファイルをちょこっと覗きたいな」と思ったときに抜群に便利なlessコマンドであるが、普段綺麗に色付けされたソースコードを見慣れていると、モノクロのソースコードの見づらさに愕然としてしまう。結局lessを終了して他のエディタで開きなおすことになるのだが、lessでソースコードに色付け(シンタックスハイライト)できれば便利なのになーっ!と思ったことはないだろうか。そう、あるんです!lessでシンタックスハイライトする方法はあるんです!というわけで、今日はその方法を紹介しよう。

GNU Source-highlight

結論から言うと、今日紹介する方法はGNU Source-highlightを使う。GNU Source-highlightを使えばイッパツだ。なのでまずGNU Source-highlightをインストールしよう。UbuntuやFedoraならリポジトリにあるので、次のようにapt-get等でインストールする。

Ubuntuの場合
shell> sudo apt-get install source-highlight

Fedoraの場合
shell> su -
shell# yum install source-highlight

その後、環境変数を次のようにセットすればシンタックスハイライトは完了だ。

shell> export LESS='-R'
shell> export LESSOPEN='| /usr/share/source-highlight/src-hilite-lesspipe.sh %s'

後はlessを使ってソースコードを開けばあら不思議!!綺麗にシンタックスハイライトされたソースコードが見られるというわけだ。次のスクリーンショットはlessでMySQLのソースコード(sql/sql_parse.cc)を表示しているところ。見やすさが断然違う。


毎回シンタックスハイライトをするなら、.bashrcなどに書いておくといいだろう。

カスタマイズしよう!

筆者は普段vimを使う場合wombatというカラースキームを使っている。(メインのエディタはEmacsなのだがvimも使う。)wombatはなかなかに視認性がよく気に入っているので、できることならlessのカラースキームもそれにあわせたい。残念ながら、上記のスクリーンショットはwombatとはかなり違う。ならばカラースキームをカスタマイズするしかないだろう!!

まず、先ほど環境変数にセットした/usr/share/source-highlight/src-hilite-lesspipe.shをホームディレクトリ配下の適当な場所にコピーする。筆者の場合、ちょこっとしたスクリプトなどは$HOME/binに置くことにしているのでここにコピーした。次に、$HOME/.source-highlightディレクトリを作成し、ここにカラースキームファイルをコピーする。

shell> cp /usr/share/source-highlight/esc.style $HOME/.source-highlight/wombat.style

次に、wombat.styleが読み込まれるように、src-hilite-lesspipe.shを編集しよう。esc.styleとなっている箇所があるので、それを$HOME/.source-highlight/wombat.styleに変更する。

#! /bin/bash

for source in $1; do
    case $source in
        *ChangeLog|*changelog) 
        source-highlight --failsafe -f esc --lang-def=changelog.lang --style-file=$HOME/.source-highlight/wombat.style -i $source ;;
        *Makefile|*makefile) 
        source-highlight --failsafe -f esc --lang-def=makefile.lang --style-file=$HOME/.source-highlight/wombat.style -i $source ;;
        *) source-highlight --failsafe --infer-lang -f esc --style-file=$HOME/.source-highlight/wombat.style -i $source ;;
    esac
done

そして、環境変数LESSOPENでカスタマイズしたsrc-hilite-lesspipe.shが使用されるようにする。

shell> export LESS='-R'
shell> export LESSOPEN='| $HOME/bin/src-hilite-lesspipe.sh %s'

こうすることでwombat.styleがカラースキームとして使われるようになる。あとはwombat.styleを好みにあわせて編集すれば、希望通りのカラースキームになるというわけだ。ちなみに、筆者は次のように設定した。

keyword yellow b;
type, classname green b ;
string pink b ;
regexp orange ;
specialchar pink ;
comment cyan b ;
number purple b ;
preproc darkblue b ;
symbol white b;
function gray b;
cbracket gray b;
variable green b;

// line numbers
linenum yellow;

// other elements for ChangeLog and Log files
date blue ;
time darkblue ;
ip darkgreen ;
file darkblue ;
name darkgreen ;

// Internet related
url blue u;

// for diffs
oldfile orange;
newfile darkgreen;
difflines blue; 

// for css
selector purple;
property blue;
value darkgreen i;

さて、このようにカスタマイズした結果が次のスクリーンショットである。これでlessを開いてソースコードを快適に閲覧できるようになった!


vimのwombatとは微妙に違うがこまけぇことは気にするな!!

さらに・・・

上記の例ではredやgreenといった名前で色を指定しているが、もっと他の指定方法はないのだろうか。実は、色は端末で識別可能な書式で指定するので、HTMLのような#RRGGBBという書式は利用できない。端末では256階調の色が利用可能であり、次のように指定する。

keyword "38;5;{色番号}" b;

色番号は0〜255の整数を指定するのだが、どの番号がどの色に対応しているかについては、下記のページが参考になるだろう。

端末の256色拡張の色(パレット)について - 試験運用中なLinux備忘録

完璧なカラースキームを探求したい人は256階調の色を利用するといいかも知れない。

筆者は試していないが、GNU Source-highlightはMacでも利用できるんじゃないかと思うので、Mac方面の人もぜひ試して頂きたいと思う。

Enjoy!

追記:2011-11-11
  • Mac方面の人はMac portsやHomebrewでGNU Source-highlightをインストールできるらしいよ!(参考:lessでソースコードに色をつける(Mac OS編)- YAMAGUCHI::weblog
  • Windows方面の人はCygwinにパッケージがあるらしいよ!
  • Shift_JISなどのUTF-8以外でエンコードされているファイルは、nkfをかませばOK! export LESSOPEN='| $HOME/bin/src-hilite-lesspipe.sh %s | nkf -w'

0 件のコメント:

コメントを投稿