gitのdiffをvimdiffで見る
少し前まで、git
のdiffにvimdiff
を使う場合、git_diff_wrapper
なるファイルを用意して、
.gitconfig
の[diff]
セクションにexternal = git_diff_wrapper
とするのが主流だった(と思っている)。
今、各種dotfileを見直している中で、このダサいやり方を改善できないか調べたところ、
今の主流はdifftool
を使うやり方のようなので、乗り換えた。
.gitconfig
まず早速.gitconfig
を示す。
[diff]
tool = vimdiff
[difftool]
prompt = false
これでOK。ただし、difftool
を使うのでコマンドが変わる。
diff
のexternalを変える場合は、あくまでgit diff
が使うツールを変更するという意味になるのだが、
diff
のtoolオプションを変える場合は、git difftool
が使うツールを指定するという意味になる。
alias化
git_diff_wrapper
手法ではgit diff
でよかったのに、今回の方法ではgit difftool
と打たないといけないはイマイチなので、
エイリアスを用意する。
[diff]
tool = vimdiff
[difftool]
prompt = false
[alias]
dt = difftool
これでOK。本当はdiff = difftool
としたかったが、もともと用意されているコマンドを上書きするようなエイリアスは作れないらしい。
リードオンリー解除
さて、これで今までとだいたい同じになったが、カレントのファイルがリードオンリーで開かれるのだけが不満。
diff見ながら手直しするというのはよくあるので、毎回:set noro
なんて打ってられない。
なぜか以下のようにしたら解決した。これが完成形。
[diff]
tool = vimdiff
[difftool]
prompt = false
[difftool "vimdiff"]
cmd = vimdiff $LOCAL $REMOTE
[alias]
dt = difftool
[difftool "vimdiff"]
セクションでcmd
オプションを指定することで、difftool
で開くコマンドを指定できる。
ここに編集可能な状態で開くオプションを指定すればいいかなと思っていたが、特になんの指定もなくできた。
cmd
オプションのデフォルトがどうなってるか知らないけど、リードオンリーな状態で開くようなオプションが指定されているのかな。