【vim】ファイル検索したい(:vimgrep)
問題
ファイル検索したいです。
VSCodeでいうCtrl+Shift+F、eclipseでいうCtrl+Hがしたいです。
答え
vimgrepする。(内部grep)
:vimgrep
:vim ← 短縮可能
例)
:vimgrep 検索パターン 検索対象
:vimgrep 検索キーワード 検索したいディレクトリ/*.txt
** を指定すると再帰的に検索するので、以下のような指定ができる。
カレントディレクトリ以下を全部
:vimgrep 検索キーワード **
あるディレクトリ以下を全部
:vimgrep 検索キーワード www/**
あるディレクトリ以下のphpファイルを全部
:vimgrep 検索キーワード app/**/*.php
検索結果でジャンプ
:cc :cc [nr] [nr]番のエラーを表示(省略すると再表示) :cnext :cn 次のエラーを表示 :cprevious :cp 1つ前のエラーを表示 :clist :cl 全エラーの一覧を表示
:grep で検索、:cn, :cp で移動。
移動を繰り返すときは、コマンドの繰り返しが便利。
@: 最後のコマンドを [count] 回繰り返す @@ 直前の @{0-9a-z":*} を [count] 回繰り返す。
:cn で移動、@: でもう一度移動、@@ で移動移動移動…
一覧を表示すればそこから選択してEnterで移動も可能。
検索結果一覧を表示
:cw
:cwindow
:copen
検索結果一覧を閉じる
:cclose
メモ: 外部grep、内部grep
内部grepはひとつひとつvimで開いて検索するイメージ。そのぶん遅い。
外部grepは外部コマンドに丸投げのイメージ。そのぶん速い。
文字コードの影響で、外部grepだとヒットしないものも、vimで化けずに開けるなら内部grepでちゃんと検索できるなど違いがある。
コメント