gfでgrepの出力結果にあるファイルを開けない(Windows環境)
* gfでgrepの出力結果にあるファイルを開く(Windows環境) [#p25032b4]
*** 問題 [#k444e540]
例えば、Windowsでgrepでファイルリストを作り、それをVimで開くと、
PS tmp> grep "abc" *.txt > list.txt
PS tmp> gvim.exe .\list.txt
以下のようになるが、
./bar.txt:2:abc
./foo.txt:2:abc123
./foo.txt:4:abc
ここでbar.txtにカーソルを合わせてgfすると、以下のようなエラーメッセージが表示されて、ファイルを開くことができない。
E447: pathには "./bar.txt:2:abc" というファイルがありません
これはWindowsではisfnameに:が含まれるから、
:set isfname
isfname=@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,=
*** 解決方法1 :を適当な文字へ置換する [#gff09434]
そこで:を適当な文字(スペースとか)へ置換する。
:%s/:\</ /
すると、以下のようになる。
./bar.txt 2:abc
./foo.txt 2:abc123
./foo.txt 4:abc
これでbar.txtにカーソルを合わせてgfすると、bar.txtが開く。ちなみに、gFすると、ちゃんと2行目が開く。
*** 解決方法2 ファイルパス部分をビジュアルセレクトしてgfする [#a63eef65]
- ファイルパス部分をビジュアルセレクトしてgfする。
- 大量にファイルがある場合は1の方法で、少ない場合は2の方法で。
*** 参考 [#a2f5059e]
- http://thinca.hatenablog.com/entry/20140324/1395590910
- もっとちゃんとした解決策が必要な場合は、プラグインやファンクションを作ると良いようだ。