読者です 読者をやめる 読者になる 読者になる

気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

vim上でgrep 結果一覧から目的箇所へジャンプする

Vim

追記) vimgrepよりもめちゃくちゃはやい

agというプラグインがあるらしい。
agでvimの検索関連を高速化 - Qiita

インストールもbrewから可能。試したら、めちゃくちゃはやいっ!!
結果出力はquickfixを使っているのでvimgrep + quickfixと表示は変わらない。ぜひ、お試しあれ!

コマンドラインから実行

ag hoge

vimで利用

:Ag hoge

ctrlp.vim(高速ファイル検索) と組み合わせると更にvim環境が便利になる。
インストール方法は以下を参照。
ctrlp.vimを試してみる - BAKUNOTE

以下は古い内容。参考までに。。


vimgrep + quickfixを使うと、特定ディレクトリ以下でgrepを行い、検索結果リストより
目的箇所にジャンプができる。

vimgrepの書式

vimgrepはvimと省略して実行できる。

:vim[grep] {pattern} {file} ...

カレントバッファに対してvimgrepする

カレントバッファ:今開いているファイルを意味する。
/の代わりに使う。

" カレントバッファを対象にする
:vim {pattern} %

複数ファイルを対象にしてgrep

" カレントディレクトリ以下のあらゆるファイルを対象にする
:vim {pattern} **
" app/views以下のerbファイルを対象にする
:vim {pattern} app/views/**/*.erb
" appディレクトリ内でインデックスされている.htmlファイルを対象にする
:vim {pattern} `git ls-files app/**/*.html`

検索結果一覧を表示し、目的の箇所へジャンプ

Quickfixと組み合わせて使うとgrep結果を別画面で一覧で表示できるようになる。
この画面はvim用語ではquickfix-windowと呼ばれる。
cwは「cwindow」の略。

:vim {pattern} {file} | cw

自動的にquickfix-windowを開く

「| cw」と毎回うつのが面倒な場合はvimがQuickfixをフックするイベントを用意しているのでそれを使う。

autocmd QuickFixCmdPost vimgrep cwindow
'下記のとおりにすると:grepや:Ggrepでも自動的にquickfix-windowを開くようになる。
autocmd QuickFixCmdPost *grep* cwindow

参考URL

vimgrepとQuickfix知らないVimmerはちょっとこっち来い - Qiita