Vimの文字列検索の基本(/ と ?)と正規表現の入り口
Vimの検索は/を打つだけでも十分使えますが、正規表現を少し知っているだけで検索の精度が大きく変わります。最初に押さえておくと効くパターンをまとめます。
| キー | これだけ覚える |
|---|---|
| / / ? | 下方向 / 上方向へ検索 |
| n / N | 同方向 / 逆方向に次のマッチへ |
| zz | マッチ行を画面中央に再配置 |
基本の検索方向
/{文字列} " 下方向(カーソルより後ろ)へ検索
?{文字列} " 上方向(カーソルより前)へ検索
検索後はnで同じ方向に次のマッチへ、Nで逆方向に移動します。/で検索したときと?で検索したときではnの実際の移動方向が変わる点に注意してください。nは常に「最初に指定した検索方向」を維持します。
覚えておきたい正規表現パターン
| パターン | 意味 |
|---|---|
/^text | 行頭が「text」の行を検索 |
/text$ | 行末が「text」の行を検索 |
/foo\|bar | 「foo」または「bar」を検索 |
/\d\d\d | 連続する3桁の数字を検索 |
^と$は他の言語の正規表現とも共通する感覚で使えますが、Vimの正規表現は独自の癖があり、括弧やパイプ(OR)を素の状態で使うには\でエスケープする必要があります(\|や\(など)。\v(very magic)を先頭に付けると、他言語の正規表現に近い書き方でエスケープを減らせます。
/\v(foo|bar)
INFO: start
ERROR: code 404
INFO: end
/\d\d\dINFO: start
ERROR: code 404
INFO: end
カーソルは行単位ではなく、マッチした文字列の先頭に正確に移動します。
検索履歴を再利用する
q/
q/を実行すると検索履歴のウィンドウが開き、過去に検索したパターンを一覧から選んで再実行できます。長い正規表現を何度も打ち直したくないときに便利で、コマンドラインモードで上下キーを押しても同じように履歴をたどれます。
大文字小文字を区別するかどうか
デフォルトではignorecaseの設定に従いますが、パターンの中に大文字が含まれていると自動的に区別するsmartcaseという設定もよく使われます。検索が思った通りにヒットしないときは、まずこの大文字小文字の扱いを疑うと解決します。
\|でOR検索、\dで数字を検索します。\vを使えば普段慣れた正規表現の書き方に近づけられます。
ログファイルから特定のエラーコード(3桁の数字)だけを含む行を探したいとき、/\d\d\dで一発で絞り込めることに気づいてから、検索コマンドを正規表現込みで使う機会が一気に増えました。\vを知ってからはエスケープの数を数える手間も減りました。
検索中にカーソルを画面中央へ
検索でヒットした行が画面の端に寄っていて見づらいときは、zzでカーソル行を画面中央に、ztで画面上部に、zbで画面下部に再配置できます。検索直後にこれらを組み合わせると、周辺の文脈を見ながら次の作業に移りやすくなります。特にzzは使用頻度が高く、検索後の定番動作として指に覚えさせておく価値があります。nで次のマッチへ移動するたびにzzを挟む人も多く、慣れると無意識のセットになり、画面が大きく揺れる感覚もなくなって、読みやすさが目に見えて安定します。
まとめ
基本の//?に加えて、行頭行末指定とOR検索を覚えるだけで検索の実用性が大きく上がります。カーソル下の単語をそのまま検索したい場合は別記事を参照してください。