問題
八百万あるVimのコマンドで特に有用なもののひとつとして
gf
があります。
このコマンドはカーソル下にあるファイル名らしき文字列を探し、
該当するファイルがあればそれを開くというものです。
gf はカーソル下にあるファイル名らしき文字列をそのまま使うだけでなく、
特定のディレクトリ下にあるかどうか検索(例えばC言語でなら /usr/include や ./include を検索)したり、
特定の拡張子を付加して検索(例えばJavaなら SomeClass のファイル名は SomeClass.java なので、 .java を付加して検索)することができ、
そこそこ賢く動いてくれます。
さて、日常的に git を使っている身としては
日常的に git diff の出力を眺める機会も多いです。
「git diff の出力を眺めて変更のあったファイルを開く」ということも頻繁に行います。
これには gf を使えばよいと思うことでしょう。
ところが深遠なる事情により git diff の出力フォーマットでは変更のあったパスにプレフィックスとして a/ と b/ が付加されます。
例えば master/Foo.cs の変更を含む git diff の出力には
a/master/Foo.cs や b/master/Foo.cs といった名前が含まれます。
a/master/Foo.cs や b/master/Foo.cs の上で
gf を実行しても該当するファイルは存在しないためエラーとなってしまいます。
これは不便です。
一応、ビジュアルモードで a/ や b/ を含まないよう範囲選択をして gf を実行すれば、
選択範囲のファイル名に該当するファイルを開くことができます。
しかしいちいち範囲選択をするのも面倒な話です。
どうにかして git diff 固有の出力フォーマットでも gf で適切なファイルを開きたいところです。
しかしどうすればよいでしょうか。


