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
- もっとちゃんとした解決策が必要な場合は、プラグインやファンクションを作ると良いようだ。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS