gfでgrepの出力結果にあるファイルを開く(Windows環境)

問題

例えば、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 :を適当な文字へ置換する

そこで:を適当な文字(スペースとか)へ置換する。

 

:%s/:\</ /

すると、以下のようになる。

 ./bar.txt 2:abc
 ./foo.txt 2:abc123
 ./foo.txt 4:abc

これでbar.txtにカーソルを合わせてgfすると、bar.txtが開く。ちなみに、gFすると、ちゃんと2行目が開く。

解決方法2 ファイルパス部分をビジュアルセレクトしてgfする

  • ファイルパス部分をビジュアルセレクトしてgfする。
  • 大量にファイルがある場合は1の方法で、少ない場合は2の方法で。

参考


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

Last-modified: 2016-11-19 (土) 13:46:09