View on GitHub

memo

vimgrep

vimgrep

ファイル内の検索が可能。:grepはシステムのgrepを呼び出すためのコマンド。

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

{pattern}の概要は:help pattern-overviewでみれる。 {file}にはワイルドカードが指定可能。

vimgrepは普通のgrepやgit-grepより遅い。

キーバインド候補

nnoremap [q :cprevious<CR>   " 前へ
nnoremap ]q :cnext<CR>       " 次へ
nnoremap [Q :<C-u>cfirst<CR> " 最初へ
nnoremap ]Q :<C-u>clast<CR>  " 最後へ

/との違い

| | / | vimgrep | |————————|——————|———————–| | 正規表現使える | yes | yes | | 検索対象 | カレントバッファ | 引数で指定する | | ヒット件数 | 分からない | 分かる | | 次の検索結果へ移動する | n | :cn[ext] | | 前の検索結果へ移動する | N | :cN[ext] :cp[revious] | | Quickfix使える | no | yes |

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

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

何度も同じ検索対象を使う場合

:vim foo path/to/search/dir/**
:vim bar path/to/search/dir/**
:vim baz path/to/search/dir/**
:vim hoge path/to/search/dir/**
:vim piyo path/to/search/dir/**

上記の検索は、下記で置き換え可能。

:ar path/to/search/dir/**
:vim foo ##
:vim bar ##
:vim baz ##
:vim hoge ##
:vim piyo ##

:ar[gs]コマンドは、次のようにも使える。

:ar `find . -name \\*.rb`

検索オプション

g オプションをつけない場合、それぞれの行に対して一度しかマッチしません。 g オプションをつけると、すべて、マッチします。

:vimgrep /foo/g *

j オプションをつけると、マッチした場所にジャンプしません。

:vimgrep /foo/j *

大文字小文字を区別しないには、 \c を指定します。 / を省略することもできますが、gやjのオプションを指定できなくなります。

:vimgrep /foo\c/ *
:vimgrep foo *
:vimgrep foo\c *

先頭に \C を入れることで大文字と小文字を区別するようになります。

:vimgrep /\Ckeyword/ **

ファイルの指定するときに ** を使うことで再帰的にファイルを検索することができます。

:vimgrep fprintf **/*.c

Reference