開発したアプリなど一覧

Vimgrep を使ってみる。

最近まで vimgrep の存在は知っていたが全然使ったことが無かったので、覚えたほうが便利かなーと思って今覚えた。今までなんでやらんかったのか。。。

というわけで vimgrep を使ってみた。

vimgrep には 内部grep外部grep の二種類があるようですが今回は 内部grep を使います。

以下は WordPress のルートディレクトリで実行してます。

基本形

:vimgrep /header/ *.php

// 結果
(1 of 108): * wp-blog-header.php which does and tells WordPress to load the theme.

カレントディレクトリの .php で終わるファイルを対象に header を検索します。
なんの慣習か / で区切ってますが vim で置換するときと同様に適当な記号で大丈夫です。どこまで大丈夫なのかはわかりませんが。

ただ、これ実行すると検索した結果の一番目のファイルを自動的に開くし、ステータスバー一行に結果の一番上だかだけが表示されてとても使いにくい。
なので 自動ジャンプをoffにする j それから検索結果の一覧を表示するための QuickFix と組み合わせて使います。

:vimgrep /header/j *.php | cw

// 結果
 1 index.php|4 col 12| * wp-blog-header.php which does and tells WordPress to load the theme.
 2 index.php|17 col 20| require('./wp-blog-header.php');
 3 wp-activate.php|7 col 21| require( './wp-blog-header.php' );
 4 wp-activate.php|17 col 22| do_action( 'activate_header' );
 5 wp-activate.php|19 col 22| function do_activate_header() {
 6 wp-activate.php|22 col 37| add_action( 'wp_head', 'do_activate_header' );
 7 wp-activate.php|37 col 5| get_header();
 8 wp-app.php|447 col 47| // getting warning here about unable to set headers
 9 wp-app.php|450 col 59| // this could affect our ability to send back the right headers
10 wp-app.php|754 col 10| status_header('200');
[Quickfix List] :vimgrep /header
(1 of 108): * wp-blog-header.php which does and tells WordPress to load the theme.

こうすることで QuickFix で参照できます。j k で選択して enter とか押すと該当箇所へジャンプできます。

再帰的に検索

ディレクトリを再帰的に検索します。

:vimgrep /header/j **/*.php | cw

なぜ ** で再帰的に検索できるのか?
これも知らなかったのですが、help によると starstar-wildcard というらしいです。

*starstar-wildcard*
Expanding "**" is possible on Unix, Win32, Mac OS/X and a few other systems.
This allows searching a directory tree. This goes up to 100 directories deep.

再帰的といっても100ディレクトリまでのようです。実際そんな深いディレクトリまで見ないだろうけど...。

バッファ内検索

ファイルだけでなく、バッファも検索の対象にできます。

:bufdo vimgrepadd /header/ %
:cw

bufdo は全てのバッファで対象のコマンドを実行するコマンドです。
vimgrepadd は vimgrep の結果に追記するためのコマンドです。
追記が終わったら cw で QuickFix を起動してます。ここをファイルを対象にする時のように | cw とするとファイルが分割で開いてしまったのがちょっと思ってた動きと違う。。。

vimgrepadd で追加しまくってるといろいろ邪魔になってくるのでそんなときは

:cexpr ""

で削除しちゃいましょう。

内部grep はこんなところかな。これ覚えたらかなり便利っすね。

Sponsored Link

コメント