検索の基本
Vim でカレントファイル内の文字列を検索するには、次のような検索コマンドを使用します。
入力 | 説明 |
---|---|
/pattern [Enter] | パターンを検索(順方向) |
?pattern [Enter] | パターンを検索(逆方向) |
n | 次の一致箇所にジャンプ |
N | 前の一致箇所にジャンプ |
/ [Enter] | 同じパターンで再検索(順方向) |
? [Enter] | 同じパターンで再検索(逆方向) |
* | カーソル下の単語を後方検索(g* で部分一致検索) |
# | カーソル下の単語を前方検索(g# で部分一致検索) |
パターンによる検索 (/
, ?
)
検索パターンでは正規表現を使用できます。
/^void " ^ は行頭に一致
/te* " t, te, tee などに一致
/te\+ " te, tee, teee などに一致
/te\= " t あるいは te に一致
/\a\a\a " 任意の 3 文字のアルファベットに一致
/\d\d\d " 任意の 3 桁の数字に一致
/[Tt]he " The, the を検索 (:set ignorecase しておく手もあり)
/x[+*%]y " x+y, x*y, x%y を検索
/x[\^\-]y " x^y, x-y を検索 (ブラケット式の中の ^ や - はエスケープする)
/a\{3,5} " aaa, aaaa, aaaaa に一致 (aaaaa があれば aaaaa に一致する)
/a\{-3,5} " aaa, aaaa, aaaaa に一致 (aaaaa があっても aaa に一致する)
/a\{3,} " 3 個以上の a に一致
/a\{,3} " 3 個以下の a に一致
/a\{3} " 3 個の a に一致
/\(abc\)\+ " abc, abcabc, abcabcabc などに一致
" \( と \) で囲まれた部分に一致したテキストの繰り返し
/\(ab\+c\)\1 " abcabc, abbcabbc などに一致
" \( と \) で囲まれた部分に一致したテキストを \1 で参照
/foo\|bar " foo か bar に一致
/\<print " \< は単語の先頭に一致
/\<word\> " \< は単語の先頭、\> は単語の末尾に一致
/^[[:digit:]] " 数字で始まる行を検索
" ブラケット式の中の [:digit:] という文字クラスは数字を表す
検索履歴
/
や ?
による検索モードで、CTRL-P
や CTRL-N
(あるいは上下カーソルキー)を入力すると、検索履歴を表示することができます。
過去に入力した複雑な検索パターンで再検索したいときに便利です。
カーソル位置の単語を検索する (*
, #
)
Vim のノーマルモードで、*
や #
を入力すると、カーソル位置にある単語を後方検索、前方検索することができます。
入力 | 説明 |
---|---|
* | カーソルの下の単語を後方検索(g* で単語を一部に含む文字列も検索) |
# | カーソルの下の単語を前方検索(g# で単語を一部に含む文字列も検索) |
続けて、n
(あるいは N
)を入力することで、次の一致場所にジャンプすることができます。
検索後は同じ単語の上にカーソルが移動するので、実際には続けて *
を入力することでも次の一致場所にジャンプすることができます。
つまり、同じ単語で連続して検索する場合、連続して入力するキーは、n
と *
のどちらでも構いません。
応用
[I " カーソル位置のキーワードを含む行をすべて表示する
[D " カーソル位置のマクロ定義を含む行をすべて表示する
fx " カレント行の次の文字 x へ移動
Fx " カレント行の前の文字 x へ移動
tx " カレント行の次の文字 x のひとつ前の文字へ移動
Tx " カレント行の前の文字 x のひとつ後ろの文字へ移動
; " 前回の行内の文字検索を繰り返し(同じ方向)
, " 前回の行内の文字検索を繰り返し(逆の方向)
dt.
ct)
dt " 最後にスペースを入力しています