colordiff で色とりどりな世界へ
実は今まで diff はすべてモノクロで見ていた。Emacs の vc-diff 以外では。どうにかならんかなぁと思ってはいたがこんなもんかなとも思って長いこと過ごしていた。
しかし
coderepos の commit 数ナンバー1の人が github を練習したメモ - TokuLog 改めB日記
を読んで git では設定次第で color 出力できることが分かった。だったら他のツールでもそういう方法は必ずあるはずだと思ってググったらいきなり
が出てきた。そこら中でパッケージとして利用できるみたいなので使い始めるのは十分簡単。中身は Perl スクリプトで、diff の出力を解析してエスケープシーケンスで色づけしてくれる。
使い方は
diff [options] FILE1 FILE2 | colordiff
みたいなのでもいいし、
colordiff [options] FILE1 FILE2
でもいい。基本的に diff の代わりとして使えるように配慮されているようだ。手っ取り早くは
svn diff | colordiff
みたいにしても使える。調子に乗って
.subversion/config
で
diff-cmd = colordiff
にしてみたけど、これは失敗。というのも Emacs の vc-diff がエスケープシーケンスをそのまま吐き出して意味不明になってしまうから。ということは
svn diff | colordiff
hg diff | colordiff
git diff
で color 出力できるって感じか。
また、普段ページャとして less を使っているんだけど、less は標準ではエスケープシーケンスによる色づけには対応していない。man を読むと
-R or --RAW-CONTROL-CHARS
Like -r, but only ANSI "color" escape sequences are output in
"raw" form. Unlike -r, the screen appearance is maintained cor-
rectly in most cases. ANSI "color" escape sequences are
sequences of the form:
ということは、-r か -R でエスケープシーケンスをそのまま terminal に解釈させられそう。
最終的には .zshrc で
export LESS=R
alias diff='colordiff -u'
しといた。簡単な色づけだけど、分かりやすさが段違いだ。こりゃ便利。
あと直接関係ないけど
alias ls='ls --color=auto'
を
alias ls='ls --color'
にした。(BSD では export CLICOLOR_FORCE=1 )これで ls の出力を less に渡しても色付きで見ることができる。