← Vim道場

操作を記録して繰り返す

ドットコマンドは直前の「変更」1つを繰り返しますが、移動を含む一連の手順は繰り返せません。マクロはキー操作をまるごと記録して、何度でも再生できます。同じ形の行が何十行と並んでいるときの直しが、記録1回と再生の連打で終わります。

第6章 まとめて片づけるレッスン 29 / 36

記録は「レジスタ」に入る

qaa はレジスタの名前です。コピーで使うレジスタと同じ場所で、こちらにはキー操作の並びが文字列として入ります。だから a から z まで26本のマクロを持てます。

記録中はステータス行に表示が出ます。止めるときは q だけです(レジスタ名は要りません)。直前に再生したマクロは @@ でもう一度呼べます。

繰り返しやすい記録の書き方

マクロは記録したキーをそのまま再生するので、実行するたびに同じ結果になる操作で組み立てるのが要点です。行の先頭から始めて最後に j で次の行へ移る、という形にしておくと、何回再生しても同じ位置関係を保てます。

逆に、l を何回も押して位置を合わせるような記録は、行の長さが変わると壊れます。fciw のように内容を頼りに動くキーを使うほど、繰り返しに強いマクロになります。

ドットコマンドとの使い分け

変更1つを繰り返すだけなら . のほうが手軽です。移動を含む複数の操作をひとまとまりにしたいとき、あるいは同じ手順を何十回も繰り返したいときにマクロを使います。

失敗したら u で戻せます。ただし再生1回ごとに変更が積まれるので、10@a のあとで元に戻すには u を何度か押すことになります。

失敗したら止まる性質を使う

マクロは、途中のコマンドが失敗した時点で再生を中断します。f, で探した文字が行に無ければそこで止まる、という具合です。

この性質を使うと、回数を数えずに済みます。対象が何行あるか分からないときは 1000@a のように大きすぎる数を指定しておけば、対象が尽きた時点で自然に止まります。数え間違いで足りなくなることも、行き過ぎることもありません。

記録したマクロを直す

マクロはレジスタに入った文字列なので、あとから編集できます。空の行で "ap と打つとマクロの中身がテキストとして貼り付けられるので、間違えた箇所だけを直して "ay$ で書き戻せば、記録し直さずに済みます。

長い手順を記録して最後の1キーだけ間違えた、という場面で効きます。何度も記録し直すより速く、内容を目で確かめられるという利点もあります。

マクロの中でマクロを呼ぶ

マクロの最後に @a 自身を含めると、失敗するまで自分を呼び続けます。回数を指定せずにファイルの終わりまで処理できるので、対象の数が読めないときに使われる書き方です。

ただし、止まる条件が無いマクロを再帰させると終わらなくなります。必ず fn のように「見つからなければ失敗する」コマンドを手順に含めてください。この練習ページのエディタでは、暴走を防ぐために再生できるキー数に上限を設けてあります。

このレッスンで扱うキー

キー動き
qaレジスタ a に記録を開始
q記録を終了
@a記録した操作を再生
3@a3回まとめて再生

関連記事

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