Vim のキーボードマクロが便利なのだがあまり使わないのでいざ使うときに「あれ、どうやってたっけ?」となるので Vim のキーボードマクロの基本的な記録、実行と閲覧方法をメモしておく。
キーボードマクロとは
テキストエディターの多くは入力した文字を保存しておいて保存しておいた文字を後から実行する機能があり、一般的にキーボードマクロとかキーボードレコーダーとか呼ばれることが多い。 この機能は Vim にも備わっていて、うまく使うと単調な繰り返し作業などを非常に効率よく処理することができる。
ちなみに Vim の同機能は記録と実行を合わせて complex repeats
というようだ。詳しくは help q
を参照。
キーボードマクロの記録
ノーマルモードで q
とタイプして続いてキーボードマクロの記録先のレジスターをタイプする。
キーボードマクロの記録先のレジスターは [0-9a-zA-Z"]
から選べるので、たとえばキーボードマクロをレジスター a
に記録するなら qa
とタイプする。
キーボードマクロの記録が開始するとステータス行に recording @a
のように表示されるので、実際の操作をしていく。
記録したい操作が終わったらノーマルモードに戻ってもう一度 q
をタイプする。
するとステータス行の recording @a
が消えてキーボードマクロの記録が終了したことが分かる。
キーボードマクロの実行
ノーマルモードで @
とタイプして続けて実行したいキーボードマクロの記録先のレジスターをタイプする。
たとえばレジスター a
に記録しておいたキーボードマクロを実行するときは @a
とタイプする。
@
は他のコマンドと同じように実行回数を指定できるので、たとえば 10@a
のようにタイプするとレジスター a
に記録しておいたキーボードマクロを10回実行することができる。
キーボードマクロの閲覧
ノーマルモードで reg
とタイプするとレジスターに記録されているキーボードマクロが閲覧できる。
キーボードマクロの例
4の倍数のときだけアホになるキーボードマクロ。
数値が1行ごとに書かれているので qa
でキーボードマクロの記録を開始して 4j0cwstupid!<esc>
をタイプして q
で記録を終了して、 10@a
で記録しておいたキーボードマクロを実行している。
それぞれのコマンドは以下を参照。
4j
: カーソルを4行下に移動0
: カーソルを行頭に移動cw
: 単語を削除してインサートモードを開始stupid!
: インサートモードで単純にタイプ<esc>
: ESC キーをタイプの意味。インサートモードを終了してノーマルモードへ戻る。