git diff を1文字単位で出力する

git diff で差分を見られるが、1文字の差分でも行単位に差分が見えてしまうので、少々使いづらい。

そこで、--word-diff というオプションを渡すと、単語単位で差分を表示してくれるようになる。

$ git diff --word-diff

コレでも十分見やすくはなったが、a = 1;a = 2; といった行の差分を見た時に、a = 1;2; というように、変更が入っていないセミコロン ; まで差分かのように見えてしまう場合がある。

もう少し調べてみると、以下のような正規表現をオプションで渡してやることで、本当に差分がある 12 部分だけを色付けしてくれるように設定できた。

$ git diff --color-words --word-diff-regex='\\w+|[^[:space:]]'

~/.bashrc でエイリアスに指定する時は、シングルクォートをエスケープして以下のように指定すれば良い。

# エイリアス「gdfw」として定義する
alias gdfw='git diff --color-words --word-diff-regex='\''\\w+|[^[:space:]]'\'''

~/.gitconfig にエイリアスを指定する場合は以下のように書けば良い。

# Git エイリアス「git dfw」として定義する
[alias]
  dfw = diff --color-words --word-diff-regex='\\w+|[^[:space:]]'