← Vim道場

直前の変更を繰り返す

同じ直しを何箇所かに入れる場面は毎日あります。. は直前にやった変更をそのままもう一度実行するキーで、入力した文字まで含めて繰り返してくれます。移動して . 、移動して . のリズムが身につくと、置換を書くまでもない修正が一気に速くなります。

第3章 手数を減らすレッスン 16 / 36

何が繰り返されるのか

. が繰り返すのは変更であって、移動は含まれません。ciwnew と入力して Esc を押した一連が1つの変更として記録され、. はそれをカーソル位置で実行します。

移動が含まれないおかげで「移動 → . → 移動 → .」という使い方ができます。逆に言うと、繰り返したい変更のあとに別の変更をしてしまうと記録が上書きされるので、繰り返しは先に済ませたほうが確実です。

. が効きやすい書き方

同じ結果になる操作でも、. の効き方には差が出ます。単語を書き換えるとき cw はカーソル位置に結果が左右されますが、ciw は単語のどこにいても同じ結果になるので、繰り返しても壊れません。

この「どこにいても同じ結果になる操作を選ぶ」という考え方は、次の検索と組み合わせるとさらに効きます。n で次の該当箇所へ飛んで .、というリズムは覚えておく価値があります。

置換との使い分け

すべてを機械的に置き換えてよいなら :%s のほうが確実です。. が向くのは「置き換えたい箇所と、そのままにしたい箇所が混ざっている」ときで、1つずつ目で見て判断しながら進められます。

間違えて . を押してしまっても u で戻せます。迷ったら試して、違ったら戻す、で構いません。

. で繰り返せないもの

. が記録するのはノーマルモードで行った変更です。:s のようなコマンドラインからの実行は対象外で、直前の置換を繰り返したいときは代わりに & を押します。:g やマクロの実行も同じく . では繰り返せません。

移動も記録されません。u による取り消しも変更ではないので、. の対象になりません。繰り返したいのに何も起きないときは、直前の操作がノーマルモードの変更だったかを思い出してください。

ビジュアルモードのあとの .

ビジュアルモードで範囲を選んで d を押したあとに . を押すと、選択した範囲と同じ大きさの範囲がカーソル位置から消えます。選んだ場所ではなく、選んだ広さが繰り返されるという点が独特です。

3行選んで消したあとに . を押せば、次も3行消えます。意図した動きなら便利ですが、直感と食い違いやすいところでもあるので、繰り返す前提の操作はビジュアルモードを使わずオペレータで書いておくと迷いません。

マクロとの境目

. で足りるのは変更が1つのときです。「行末に文字を足して、次の行へ移って、また足す」のように移動を含む手順を繰り返したいときは、第6章のマクロを使います。

目安として、繰り返したい単位に移動が含まれていなければ .、含まれていればマクロです。まず . で済まないかを考えて、無理ならマクロに切り替えると、覚えることを最小限にできます。

このレッスンで扱うキー

キー動き
.直前の変更を繰り返す
ciw単語を書き換え
dd1行削除
A行末から入力

関連記事

レッスン一覧へ戻るキーの逆引き一覧検定を受ける