Vimのドットコマンド(.)で直前の編集を繰り返す
同じ変更を数カ所に繰り返したいだけなのに、毎回同じキー操作を打ち直していました。Vimには直前の編集をまるごと繰り返す1文字のコマンドがあり、これを覚えるだけで手数が大きく減ります。
目次(10項目)
使い方はキー1つ
.(ドット)を押すと、直前に行った「変更」がそのまま繰り返されます。ここでいう「変更」とは、インサートモードに入ってからEscで抜けるまでの一連の入力・削除操作を指します。
const a = bar;
const b = foo;
const c = foo;
const a = bar;
const b = bar;
const c = foo;
1つ目のfooをciwでbarに書き換えたあと、次のfooに移動して.を押すと同じ書き換えが再現されます。
マクロとの違い
複数の操作を繰り返すという点ではマクロと似ていますが、決定的な違いは「記録の手間がいらない」ことです。マクロは事前にqで記録を開始しておく必要がありますが、.は直前の変更を自動的に覚えていて、いつでも呼び出せます。単発の変更を数カ所に繰り返すだけなら、わざわざマクロを組むまでもなく.で十分なことが多いです。複雑な複数ステップの操作を繰り返したいならマクロのほうが向いています。
繰り返しやすい編集を組み立てるコツ
.を活かすには、変更そのものを「同じ形」で組み立てることを意識すると効果的です。たとえばciwで単語を書き換える操作は、カーソルが単語のどこにあっても同じ結果になるため、次の対象に移動して.を押すだけで再現できます。逆に、カーソル位置に強く依存する操作(cwなど)は、対象ごとにカーソルの位置がずれていると同じ結果にならないことがあります。繰り返し前提の編集をするときは、この違いを意識しておくと失敗が減ります。
削除やインデント変更でも同じように使える
.が繰り返せるのは、挿入を伴う変更だけではありません。インサートモードを伴わない操作も、直前の実行内容として記憶され.で繰り返せます。
- dd:行削除をもう一度
- >>:インデント下げをもう一度
複数行を1行ずつ同じ理由で削除したいときなど、幅広い場面で使える汎用的な仕組みだと考えられます。
移動と組み合わせる
ciwNEW<Esc> " 単語を書き換える
w. " 次の単語へ移動して同じ書き換えを繰り返す
w. " さらに次へ
移動コマンド(wやfなど)と.を交互に打つリズムが身につくと、複数箇所の単純な書き換えが驚くほど速く終わるようになります。
似た変数名の書き換えを何十箇所も繰り返す作業で、.の存在を知る前は置換コマンドで無理やり済ませていました。ciwと.の組み合わせを覚えてからは、対象を目で確認しながら1つずつ確実に処理できるようになり、置換コマンドで意図しない箇所まで変えてしまう事故もなくなりました。目視確認しながら進められる安心感は、一括置換にはない大きな利点だと感じています。
. で繰り返せないもの
. が記録するのはノーマルモードで行った変更です。コマンドラインから実行したものは対象外なので、:s による置換は繰り返せません。直前の置換をもう一度かけたいときは & を押します。
マクロの再生(@a)や u による取り消しも変更ではないので記録されません。移動も含まれないため、. を押しても位置は動かず、その場で同じ変更が実行されます。
& " 直前の :s を今の行にもう一度
:%&& " フラグ込みでファイル全体にかけ直す
@@ " 直前に実行したマクロをもう一度
回数だけ変えて繰り返す
回数も含めて1つの変更として記録されます。3dd のあとに . を押せば、また3行消えます。
回数を変えたいときは . の前に数字を付けます。3dd のあと 5. と打てば次は5行です。あとから指定した数が、記録されていた回数を上書きします。逆に言えば、うっかり数字を打ってしまうと同じ操作にならないので、繰り返したいときは . だけを押してください。
ビジュアルモードのあとの .
ビジュアルモードで範囲を選んで消したあとに . を押すと、選んだ場所ではなく、選んだ広さと同じ範囲がカーソル位置から消えます。3行選んで消したなら、次も3行です。
意図した動きなら手数が減りますが、直感と食い違いやすいところでもあります。繰り返す前提の操作は、ビジュアルモードを使わずオペレータとテキストオブジェクトで書いておくほうが安定します。Neovimでのドット繰り返しの扱いはNeovimのドット繰り返しで扱っています。
まとめ
.はVimの基本コマンドの中でも特に費用対効果が高いです。1文字で直前の変更を繰り返せる手軽さは、覚えた瞬間から編集速度に直結します。検索でマッチした箇所を次々に書き換えていくなら、.と相性の良いcgnという組み合わせもあります。
ここで扱ったキーは、ブラウザ上で動くVim道場の直前の変更を繰り返すでそのまま試せます。インストールもログインも要りません。