[Vim]vimgrepとgrepについて

vimgrep

いわゆる内部grepに当たる。

コマンドとしては、

:vimgrep end app/views/**

のような感じになる。
ちなみに、:vimとgrepを省略しても同じである。

これを実行すると、
app/views以下のディレクトリすべてを検索対象として、
endという文字を検索する。

画像1

1 of 89とあるように、
検索結果も表示され、
最初のマッチファイルがウインドウに表示される。

次を表示したければ、
:cnextまたは、:cnと実行すればいい。

ただ普通に/で検索したときみたいに、
ハイライトされないので、ややわかりづらいが、
いちおうカーソルは該当箇所に乗っかている。

画像2

/でカレントバッファを検索したら、こんな感じになる。

vimgrepの結果をquickfixリストで一覧をみたいときは、
:copenや:cwを実行すれば下記のように見ることができる。

画像3

あとは、普通にいつもの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から出なくてもよいという
メリットは享受できそうだ。


この記事が気に入ったらサポートをしてみませんか?