正規表現検索の練習ドリル5問
検索コマンドは/を打つだけなら簡単ですが、カーソル下の単語を検索する*や、検索しながら置換するcgnのような応用形は、頭で分かっていても咄嗟に手が動かないことがあります。5問の予測ドリルで、実際の動きを確認してください。
表記のルール:|はカーソル位置を表します。答えは「答えを見る」をクリックすると表示されます。
問題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を覚える前は、検索してから改めてciwのようなコマンドで書き換えていましたが、cgnとドットコマンドを組み合わせるようになってから、同じ単語の複数箇所を書き換える作業が体感で半分以下の手数になりました。
まとめ
正規表現検索は*やcgnのような応用形を知っているかどうかで作業速度が大きく変わります。パターンの書き方をもっと詳しく知りたい場合は文字列検索の記事やcgnの記事もあわせて参照してください。