[Vim]vimgrepとgrepについて
vimgrep
いわゆる内部grepに当たる。
コマンドとしては、
:vimgrep end app/views/**
のような感じになる。
ちなみに、:vimとgrepを省略しても同じである。
これを実行すると、
app/views以下のディレクトリすべてを検索対象として、
endという文字を検索する。
1 of 89とあるように、
検索結果も表示され、
最初のマッチファイルがウインドウに表示される。
次を表示したければ、
:cnextまたは、:cnと実行すればいい。
ただ普通に/で検索したときみたいに、
ハイライトされないので、ややわかりづらいが、
いちおうカーソルは該当箇所に乗っかている。
/でカレントバッファを検索したら、こんな感じになる。
vimgrepの結果をquickfixリストで一覧をみたいときは、
:copenや:cwを実行すれば下記のように見ることができる。
あとは、普通にいつものjとかkコマンドで
上下に移動してenterを押せば、
そのファイルがウィンドウに表示される。
カーソルがウインドウに移ってしまうので、
もう一度quickfixにカーソルを持ってきたいときは、
Ctrl + wを押してからj,k,l,hで移動先に移動できる。
注意点としては、
遅いので、検索対象を**みたいに全てにすると、
いつまで経ってもおわらないみたいなことになりがち。
grep
こちらも基本的に:vimgrepとそこまで大差ないが、
いわゆる外部grepに当たる。
そのため、linuxとかで普通に使っている
grepコマンドをvimの中で実行しているという感じだ。
デフォルト値は
linuxやmacの場合、
grep -n $* /dev/nullとなっているようだ。
:grep -r --line-number --color end ./*
これで、カレントディレクトリをすべてを対象として、
endというものを探すということになる。
vimgrepよりもこちらのgrepの方が高速だ。
あとの挙動はそこまで変わらないと思う。
quickfixリストでの開き方とかも同様だ。
:grep -r --include="*.rb" end .
これで、すべてのRubyファイルに対し、
現在のディレクトリから再帰的に検索するということになる。
潔く、別のターミナルで
普通にgrepした方が画面が大きい分見やすかったり、
ハイライトできたりするので、
なんとも言えないが、
:vimgrepや:grepを使いこなせば、
いちいちvimから出なくてもよいという
メリットは享受できそうだ。