pygmentizeでmakeやsconsの出力のシンタックスハイライト

makeやsconsを実行が失敗してしまったら、どのコマンドで失敗したのか調べなくてはならない。しかし、makeやsconsによって実行されるコマンドは引数が多かったり、絶対パスが使われたりしていて非常に読みにくい場合も多い。

そこで、これをシンタックスハイライトすることで少しでも読みやすくして、原因を見つけやすくする方法を考える。

今回はpygmentizeというコマンドを使って、シンタックスハイライトを行う。
pygmentizeコマンドはPygmentsをインストールすれば使えるようになるので、easy_installやpipでPygmentsをインストールすれば良い。

pip install pygments

pygmentizeは引数にファイルをとることもできるが、今回はmakeやsconsの出力をパイプで渡し、-lで入力がsh形式であることを教えてやる。

これで、echoやcdといったコマンドや文字列がハイライトされる。

make -n | pygmentize -l sh

日本語が含まれている場合にはencodingを指定する必要がある。

make -n | pygmentize -l sh -O encoding=utf-8

色を変更したい場合には、styleを変更する。formatterを256色ターミナル用に変更しないとstyleは反映されないので注意。

make -n | pygmentize -l sh -O -f256 style=vim

出力が長い場合にはlessを使ったり、行番号を追加すれば見やすくなる。

make -n | pygmentize -l sh | less -R
make -n | pygmentize -l sh | cat -n | less -R

同じようなことはGNU Source-highlightを使って以下のようにもできるが、インストールが面倒そうだったし、ハイライトの結果もそんなに変わらないのでpygmentizeを使うことにした。

make -n | source-highlight -s sh -f esc | cat -n | less -R

追記:あるいは以下のようにvimなどをつかうのもありかもしれない。

make -n | vim +"set filetype=sh" -

不満点の一つはハイライトされる項目がかなり限られているため、せっかくハイライトしても見た目がほとんど変わらない場合が多いこと。例えば、この記事のようにオプションがハイライトされたりはしない。lexerとかを自分で書けば、エディタなどでの見た目に近づけられるだろうか

追記:本当は認識されている単語や記号でも、styleによっては色がついていないように見えることがある(例えば、&&や||とか)。上記の様にstyleを変えれば見えるようになることもある。