← Vim研究所

正規表現検索の練習ドリル5問

2019-12-17 公開 ・ 更新: 2026-08-20

検索コマンドは/を打つだけなら簡単ですが、カーソル下の単語を検索する*や、検索しながら置換するcgnのような応用形は、頭で分かっていても咄嗟に手が動かないことがあります。5問の予測ドリルで、実際の動きを確認してください。

表記のルール:|はカーソル位置を表します。答えは「答えを見る」をクリックすると表示されます。

目次(10項目)

問題1

次のテキストでカーソルがcatの上にあるとき、*を実行するとどうなるか予想してください。

The |cat sat on the cat mat. A cat slept.
答えを見る

*はカーソル下の単語を単語境界付きで検索し、次の出現箇所へ移動します。「cat mat」の「cat」ではなく、単語全体が一致する2つ目の「cat」(2番目に出現するcat)へジャンプします。

The cat sat on the |cat mat. A cat slept.

問題2

次のテキストで/cat\><CR>のようにカーソルが末尾にある状態から、nを1回実行するとどうなるか予想してください。カーソルは1行目の先頭にあります。

|category cat catalog
答えを見る

\>は単語の終わりの境界を表すので、「cat」で終わる単語だけにマッチします。「category」「catalog」は「cat」で終わっていないため対象外になり、単独の「cat」だけにマッチしてそこへ移動します。

category |cat catalog

問題3

次のテキストでカーソルが先頭にあるとき、cgnnew<Esc>を実行した直後の状態はどうなるか予想してください。直前に/old<CR>で検索した状態から続けて実行します。

|old value, old config, old data
答えを見る

cgnは直前の検索にマッチした最も近い箇所を変更対象にするオペレータです。最初の「old」が「new」に置き換わります。続けて.を押せば次の「old」も同様に置き換えられます。

new| value, old config, old data

問題4

次のコマンドを実行すると、Vimは何を教えてくれるか予想してください。実際には置換されません。

:%s/error/&/gn
答えを見る

nフラグは実際の置換を行わず、マッチした件数だけをメッセージ欄に表示します。「error」という文字列がファイル全体に何回出現するかを数えるのに使えます。

問題5

次のテキストでカーソルが先頭にあるとき、/[0-9]\+<CR>を実行するとカーソルはどこへ移動するか予想してください。

|Price: 1200 yen, Quantity: 3
答えを見る

[0-9]\+は「数字が1文字以上連続する箇所」にマッチする正規表現です。最初に見つかる連続した数字の並び「1200」の先頭へ移動します。

Price: |1200 yen, Quantity: 3
要点*は単語境界付きの検索、cgnは検索結果をそのまま変更対象にできるオペレータです。どちらも覚えると「探してから編集する」までの手数がぐっと減ります。
使ってみて

cgnを覚える前は、検索してから改めてciwのようなコマンドで書き換えていましたが、cgnとドットコマンドを組み合わせるようになってから、同じ単語の複数箇所を書き換える作業が体感で半分以下の手数になりました。

* が付ける単語境界

* は打ち込まずに検索できる便利なキーですが、実際には \<word\> という単語境界付きのパターンを組み立てています。そのため cat の上で押しても category には当たりません。

部分一致で探したいときは g* を使います。こちらは境界を付けないので、catcategorycatalog も拾います。逆方向はそれぞれ #g# です。

*     " \<cat\> を検索(単語として一致)
g*    " cat を検索(部分一致も拾う)

打ったパターンを直す

長いパターンを打っている途中で間違えると、Backspace で戻すのが面倒になります。q/ を押すとコマンドライン専用のウィンドウが開き、過去の検索履歴が一覧で並んだ状態で、通常の編集操作を使ってパターンを直せます。

この画面の中では k で過去の検索に遡り、ciw のような編集をしてから Enter で実行できます。似たパターンを少しずつ変えながら試すときに、打ち直す手間がなくなります。抜けるときは :q です。

大文字小文字の扱いを決めておく

既定の検索は大文字小文字を区別します。set ignorecase だけを書くと今度は区別できなくなるので、set smartcase と組にするのが定石です。

set ignorecase
set smartcase    " 検索語に大文字が入っていれば区別する

この組み合わせなら、error で探せば Error も拾い、Error で探せば Error だけを拾います。* はこの設定の影響を受けないので、カーソル下の単語そのままで検索されます。パターンの書き方は文字列検索の記事にまとめています。

まとめ

正規表現検索は*cgnのような応用形を知っているかどうかで作業速度が大きく変わります。パターンの書き方をもっと詳しく知りたい場合は文字列検索の記事cgnの記事もあわせて参照してください。

関連記事

← Vim研究所 トップへ戻る