grep 結果に quickfix からジャンプできない
職場の Windows マシンで混乱した話。
結論
知ってるよって人には、ここから先に新しい発見はないと思います。
.vimrc の設定をこうすれば OK。
Windows 以外だとデフォルトがこの設定なので気にすることがないかも。
grepprg=grep\ -n
調べた経緯
職場では Windows に香り屋さんの Vim を入れて使っています。
私の環境では grepprg のデフォルトが "findstr /n" となっているのですが、やっぱ grep 使いたい!ということで GOW*2 をインストール。
とりあえず .vimrc に下記のように設定。
grepprg=grep
これで grep 使えるぜ!と喜んだのもつかの間、grep 結果が quickfix に反映されるものの、該当箇所にジャンプできない…
vimgrep では問題なし。
grepprg を疑ってヘルプを見る。
:help grepprg 抜粋 default "grep -n " Unix: "grep -n $* /dev/null", Win32: "findstr /n" or "grep -n",
"-n" オプション?
grep の項目を読むと、どうやら grep 結果が grepformat 形式でないとだめらしい。
:help grepformat 抜粋 'grepformat' 'gfm' string (default "%f:%l%m,%f %l%m")
書式 f とか l とかは、"errorformat" に書いてある。
:help errorformat 抜粋 %f file name (finds a string) %l line number (finds a number) %m error message (finds a string)
現在の設定を確認。
:set grepformat grepformat=%f:%l:%m,%f:%l%m,%f %l%m
つまり、該当箇所の前に、ファイル名、行番号が必要ということですね。
ってことで、vim で grep 結果の quickfix から該当箇所にジャンプするには "grep -n" としなければなりません。
最初から grep コマンド入ってれば、こんなことしなくて済んだのに…
*1:もちろん "-I" とかオプションの追加はできます