行単位ではなく文字単位でdiffを見たい。

–word-diff-regexオプションを使う

英語などの空白文字で単語が分けられる言語は、git diff –word-diffを使えばいい。

日本語なら、git diffに–word-diff-regexオプションをつければいい。

% git diff --word-diff-regex="\w+"

こうすると日本語でも化けずに比較できた。でも、たまに差分が表示されない行がでる。


毎回–word-diff-regexオプションを付けるのが面倒なので、適当なパスの通っている場所にgit-chardiffというシェルスクリプトを作って実行権限付けた。

~/bin/git-chardiff
#!/bin/sh
git diff --word-diff-regex="\w+" $@

gitは頭に「git-」と付く実行可能コマンドをサブコマンドとして使ってくれるので、これで


% git chardiff

で文字単位のdiffが見れる。


なおdocdiffを使う方法もあるけどRuby2.0だと動かなかった。


diff-highlightを使う

参考:Git の diff を美しく表示するために必要なたった 1 つの設定 #git – 詩と創作・思索のひろば (Poetry, Writing and Contemplation)

これは通常のgit diffの行単位のdiffに、文字単位の変更もハイライトするもの。
でもこっちは日本語が化ける部分がある。

homebrewでgitを入れて、contrib/diff-highlightを使う
% brew install git
% ln -s /usr/local/Cellar/git/1.9.1/share/git-core/contrib/diff-highlight/diff-highlight /usr/local/bin/diff-highlight


~/.gitconfig に追加
[color]
ui = auto
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less

ふつうに
% git diff
すると文字単位の変更がハイライトされる