[Vim問題] 記録した操作を繰り返す「マクロ」の実行方法とは?

この記事は約5分で読めます。

この記事では、Vim / neovim でプラグインを使わずに、記録したコマンドまたは操作を繰り返す「マクロ(複雑な繰り返し)」について、ご紹介します。

汎用性も高く、とても便利な機能ですから必ず習得しましょう。

ちなみに、マクロ/複雑な繰り返し/レコーディングなど様々な呼び方がありますが、この記事ではマクロに呼称を統一します。

スポンサーリンク

[解答] q{レジスタ} 〜 q で記録、@{レジスタ} で実行

マクロの記録

(ノーマルモードで)
q{レジスタ}  (記録開始)

・・・記録したい操作・・・

q       (記録終了)

マクロの記録中は、次のように「記録中(あるいは Recoding)」と表示されます。

zレジスタにマクロを記録開始した状態
zレジスタにマクロを記録開始した状態

マクロの実行

@{レジスタ}  (記録したレジスタの内容を再実行する)
[email protected]{レジスタ} (記録したレジスタの内容を10回実行する)
@@        (直前に実行したマクロを再実行する)

マクロの確認

:reg {レジスタ} (記録したレジスタ(マクロ)の内容を確認する)

マクロの内容は少し分かりづらいですが、キー操作がそのまま表示されます。

レジスタx は j(下)5回、h(左)4回、k(上)6回、dd(行削除)1回を示す

マクロの削除

(ノーマルモードで)
q{消したいレジスタ} q 

つまり、消したいレジスタの中身を上書きするということになります。

マクロの編集

(インサートモードで)
Ctrl-r{消したいレジスタ}  (レジスタから登録されている内容を貼り付け)

〜貼り付けた内容を編集〜

ESCキー           (インサートモードからノーマルモードへ移行)
Ctr-vキー          (ビジュアルモードを開始)

〜編集した内容を選択〜 

"{レジスタ}y       (レジスタへ再格納)

いったんレジスタから貼り付け、編集、再格納ということになります。

実行は、通常のマクロとまったく同じです。

解説

ドットコマンドに加え、マクロは非常に強力です。

特に、マクロは複雑な操作も繰り返すことが可能になるため、使い方次第では作業が極めて楽になります。

その実態としては、名前付きレジスタに記録した内容をキー操作として認識して実行する仕組みです。そのため、ヘルプでは次のように記載されています。

q{0-9a-zA-Z"}    (レジスタの記録)
@{0-9a-z".=*+}  (レジスタの実行)

マクロの @{レジスタ} という実行方法はすべてのレジスタで使えます

また、記録には使えないレジスタがある反面、実行には使えるレジスタがあるわけです。

この仕組みが理解できていれば、柔軟に利用できるのではないでしょうか。

マクロを使うコツとしては、実行開始時のポジションを意識しないで済むようなマクロにするのが良いです。

つまり、行頭や行末に移動してから移動を始めるなどの処理を入れておくと誤った動きをしにくいわけです。

注意点としては、マクロを記録したレジスタを同じマクロ内で利用しない、あるいは貼り付けて使ったりしないことです。

これは、マクロがレジスタを活用することで起こる副作用とも言える部分ですね。

よく使う便利なVimマクロの例

簡単なものだと次のようなマクロがよく使われるようです。

行末にセミコロンを入れる

次のようなレジスタ内容を実行すれば、行末にセミコロンが入ります。

A;^[j

Shift-aキーで行末にインサートモードへ移行して、;を入力した後、ノーマルモードに戻って j で下の行に移動するわけです。

カウントして実行すれば、複数行で一気にセミコロンを挿入できます。

HTMLのリストのアイテムタグを付与する

次のレジスタの内容を実行すると、リストのアイテムタグを付与できます。

I<li>^[A</li>^[j

次のアニメーションは、3行に対して実行したものです。

[email protected]キーで実行した様子

JavaScript で 変数を定義する

次のレジスタの内容を実行すると、JavaScriptの変数の定義・初期化できます。

Ivar ^[A = "";^[j

次のアニメーションは、5行に対して @v を5回も実行したものです。

Python で関数の定義とインデントを施す

次のレジスタの内容を実行すると、Pythonで関数の定義とインデントを施します。

Idef ^[A:^Ij>>j>>

こちらは記録したものを再生したものになります。

これはちょっと極端ですが、何度も実行する処理で かつ ノーマルモードとインサートモードを行き来する処理であれば、間違いなく積極的ンい利用すべき機能だとわかりますよね!

このVimコマンドの補足情報

  • 利用頻度5.0
  • 便利さ5.0
  • 覚え易さ3.0

関連するVimヘルプ

Vimからは、下記のコマンドでヘルプを確認できます。

:help complex-repeat
:help q
:help recoding
:help @

ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。

参考書籍

こちらの書籍が参考になります。

実践Vim 思考のスピードで編集しよう! (アスキー書籍)
古くて新しいUnixのエディタVim――このVimのエディタとしてのコア機能をマスターするた...

Vim/neovim関連の書籍で、もっとも評判が良い(気がする)書籍です。Vim基本動作に関するバイブルと読んでる人もいます。その高い評価は、Amazonのレビューを読んでも間違いありません。

 

Vimテクニックバイブル~作業効率をカイゼンする150の技
(概要)Vimは開発者やサーバ管理者だけでなく,幅広いユーザをカバーする強力な̌...

こちらもVim関連の書籍で評価が高い書籍です。Vimを実践で使うノウハウが詰まっていますので、Vimmerなら一読する価値アリです。

 

Vim script テクニックバイブル ~Vim使いの魔法の杖 | Vim scriptサポーターズ |本 | 通販 | Amazon
AmazonでVim scriptサポーターズのVim script テクニックバイブル ~Vim使いの魔法の杖。アマゾンならポイント還元本が多数。Vim scriptサポーターズ作品ほか、お急ぎ便対象商品は当日お届けも可能。またVim script テクニックバイブル ~Vim使いの魔法の杖もアマゾン配送商品なら通常...

Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊。Vim力を伸ばすなら、一度は読んでおくべきかも知れません。

プロフィール
管理人
Vim 一郎

Vim力アップして、そろそろ上級 Vimmer の仲間入りしたいIT系エンジニアの端くれです。読んでくる訪問者の皆様と一緒に、Vim力を上げていくことができる記事が書ければと考えています。

Vim 一郎をフォローする
Vim操作方法
Vim 一郎をフォローする
スポンサーリンク
関連記事
Vim入門
タイトルとURLをコピーしました