jump to navigation

VimでGrepする覚え書き 1/2 「内部grep」編

2007-11-12 00:40 Posted by
nase
in : プログラミング
gun.jpg

VimでGrepが使えるのは分かっちゃいるものの、どうもまだ以前からの使い慣れたツール(私の場合はJGREP2)を使ってしまっていたので、ここらで一度VimのGrepについてまとめておきます。

せっかくの便利な機能ですから、やっぱり使いこなしておきたいですね。

以下、まずはVimの標準機能を活用するための解説から。

内部grep

Vim7からは標準でgrep機能が備わっています。

以下のようにコマンドを実行すると便利。

:vim[grep] /hogehoge/j *.txt | cw

これでカレントディレクトリにある全ての.txtファイルから「hogehoge」を検索し、マッチした結果がQuickFixに表示されます。

ちなみに「j」オプションはマッチしたファイルへ自動的にジャンプしない指定、そして「| cw」はマッチしたファイルがあった場合にQuickFixを開きます。

毎回「| cw」を付けるのが面倒な場合は、以下のautocmd設定で自動化することも可能。

au QuickfixCmdPost vimgrep cw

QuickFixの主な操作は、以前にも一度書きましたが以下の通り。

:cn #次のエラー箇所へジャンプ
:cp #前のエラー箇所へジャンプ(:cNでも同じ)
:ccl #QuickFixを閉じる

:vimgrep /hogehoge/ **/*.txt

こうすると今度はカレントディレクトリ以下のディレクトリ内にある.txtファイルも検索対象になります。

さて、このように大変便利なvimgrepですが、ひとつ注意すべきはこのコマンドを実行すると検索対象のファイルが全てMRUに反映されてしまうということです。

MRU(最近使ったファイル一覧)のプラグインを使われている方はご注意ください。

参考ページ

Vim documentation: quickfix - vimgrepと:grepの使い方
「内部grepはファイルをメモリに読み込むため、より遅い」とのこと。目的に応じて外部grepと使い分けましょう。
Tanablog: Vim7 内蔵の grep を使う
vimgrepの分かりやすい解説記事。
tips/66 :grep や :make の実行後、自動的に QuickFix ウィンドウを開く - VimWiki
Vim7からはこんなautocmdも指定できるようですね。

ヘルプのgrep

ヘルプのgrepには専用のコマンドが用意されています。

:helpg[rep] hogehoge

検索キーワードに正規表現を使うときも「//」で囲まないので注意。(こちらでは「j」オプションや「| cw」も使えません)

こちらは実行しても検索対象のファイルはMRUに反映されませんでした。

参考ページ

vimエディタのヘルプドキュメントのgrep検索 — 名無しのvim使い
「helpgrep」コマンドの使い方を画像付きで紹介。

開いている全てのバッファからgrep

これはなかなか便利な小技。

以下の方法で保存前の状態のファイルも含め、現在開いている全てのバッファからgrepできます。

:bufdo vimgrepadd /hogehoge/ %

見えてるバッファだけで実行する場合は「bufdo」の代わりに「windo」が使えるよう。

検索するたびにQuickFixに結果が追加されていくので、一旦結果をクリアするときは「cexpr “”」で。

参考ページ

Big Sky :: 意外と知られていないvimのtips(複数のバッファから検索結果一覧を作成する)
聞けば納得の仕組み。「外部grep」編で紹介予定のgrep.vimにもGrepBufferというコマンドがありますが、そちらでは保存した状態のファイルしか検索できなさそう。

さてさて、次回は「外部grep」編の予定です。(自分はこれからドキュメントを読み直しますんで、興味のある人は自分で調べてもらった方が早いかも・・・)

追記(2008-01-13)

連載完了っ。

Comments»

no comments yet


*Comments and trackbacks will appear after it is approved by the administrator.