Vimマクロの使い方を徹底解説!操作の記録と再生をステップバイステップでマスター

Vimには強力な「マクロ」機能が搭載されており、エディタ内で行った一連の操作を記録し、あとで何度でも再生することができます。同じような編集作業を大量に繰り返す場合、この機能を使いこなせるかどうかで作業効率が大きく変わります。
本記事では、Vi/Vimエディタにおけるマクロの記録・再生方法を、2つの具体的な例題を通じて詳しく解説します。
Vimマクロの記録と再生:基本の手順
- 記録を開始:「q」キーを押した後、小文字のアルファベット(レジスタ名)を入力
- 編集操作を実行:Vim上で通常どおりの編集を行うと、その操作がすべて記録される
- 記録を終了:「q」キーを押す
- マクロを再生:「@」キーの後にマクロ名(レジスタ名)を入力
- 複数回繰り返す:「回数@マクロ名」(例:10@a)で指定回数分まとめて再生
例題1:Vimマクロでファイル内に連番を自動生成する
手順1:テストファイルを作成する
$ vim sequence-test.txt
手順2:挿入モードで「1.」と入力する
「Esc」→「i」の順に押して挿入モードに入り、「1.」と入力します。
$ vim sequence-test.txt 1.
手順3:記録を開始し、レジスタ「a」に保存する
「Esc」→「q」→「a」の順に入力します。
- 「q」は記録の開始を意味します
- 「a」はレジスタaに記録内容を保存することを意味します
- 「qa」と入力すると、画面下部に「recording(記録中)」という表示が現れます
手順4:1行目を2行目にコピーする
「Esc」→「yy」→「p」の順に入力します。
- 「yy」は現在の行をコピー(ヤンク)します
- 「p」はコピーした行を貼り付けます
$ vim sequence-test.txt 1. 1.
補足:この時点でも画面下部には「recording」の表示が残っています。

図:画面下部に表示されたrecordingメッセージ
手順5:数値をインクリメントする
カーソルを2行目に置いた状態で「Ctrl+a」を押すと、数値が1つ増えて「2」になります。
$ vim sequence-test.txt 1. 2.
補足:まだ記録中であるため、下部の「recording」表示は消えません。
手順6:記録を終了する
「q」を押すと記録が終了し、画面下部の「recording」表示が消えます。
手順7:マクロを98回繰り返す
「98@a」と入力します。
- 「@a」はマクロ「a」を1回再生します
- 「98@a」はマクロ「a」を98回連続で再生します
これにより、1〜100までの連番が自動的に生成されます。

図:マクロを使った連番の自動生成
例題2:引数を変えながらVimマクロを繰り返し実行する
この例では、同じコマンド構造を保ちながら、各行ごとに異なる引数(ここではユーザー名)を当てはめて処理を繰り返す方法を解説します。名前のリストからSQL文を一括生成するケースを見ていきましょう。
マクロ実行前:change-password.sql
$ vim change-password.sql Annette Warren Anthony Preston Kelly Taylor Stiller Dennis Schwartz
マクロ実行後:change-password.sql
$ vim change-password.sql ALTER USER Annette IDENTIFIED BY 'Annette'; ALTER USER Warren IDENTIFIED BY 'Warren'; ALTER USER Anthony IDENTIFIED BY 'Anthony'; ALTER USER Preston IDENTIFIED BY 'Preston'; ALTER USER Kelly IDENTIFIED BY 'Kelly'; ALTER USER Taylor IDENTIFIED BY 'Taylor'; ALTER USER Stiller IDENTIFIED BY 'Stiller'; ALTER USER Dennis IDENTIFIED BY 'Dennis'; ALTER USER Schwartz IDENTIFIED BY 'Schwartz';
手順1:名前のみが記載されたファイルを開く
$ vim change-password.sql Annette Warren Anthony Preston Kelly Taylor Stiller Dennis Schwartz
手順2:記録を開始し、レジスタ「a」に保存する
「qa」と入力します。画面下部に「recording」メッセージが表示されます。
手順3:行頭に移動して「ALTER USER」と入力する
1行目の任意の位置にカーソルを置き、「I」(大文字のi)を押します。カーソルが行頭に移動して挿入モードになるので、「ALTER USER 」と入力します。
手順4:次の単語(名前)をコピーする
「Esc」→「w」→「yw」の順に入力します。
- 「w」で次の単語(名前)の先頭に移動します
- 「yw」で現在の単語(名前)をコピーします
手順5:行末に移動して「IDENTIFIED BY '」と入力する
「Esc」→「A」の順に押して行末に移動し、「IDENTIFIED BY '」と入力します。
手順6:コピーした名前を貼り付ける
「Esc」→「p」の順に入力すると、手順4でコピーした名前が貼り付けられます。
手順7:末尾の引用符を閉じる
「Esc」→「A」で行末に移動し、「';」と入力して文を完成させます。
手順8:次の行に移動して記録を終了する
「Esc」→「j」→「q」の順に入力します。
- 「j」で次の行に移動します
- 「q」で記録を終了します
補足:画面下部の「recording」メッセージが消えます。この時点でファイルは以下のようになっています。

図:マクロの記録完了時点の状態
手順9:残りの行に対してマクロを8回実行する
「8@a」と入力します。
- 「@a」はマクロ「a」を1回再生します
- 「8@a」はマクロ「a」を8回連続で再生し、残りの行を自動的に処理します

図:マクロ再生の完了
おすすめの参考書籍
Ramesh Natarajan著『Vim 101 Hacks』。筆者はコマンドラインが大好きで、当然ながらVi/Vimエディタの熱心なファンでもあります。かつてLinux上でC言語のコードを大量に書いていた頃は、入手できる限りのVimのTipsやトリックを読み漁っていました。そうした経験をもとに執筆した本書には、Vimの高度な機能に関する101の実践例が収録されており、Vimをより速く、より生産的に使いこなすためのヒントが満載です。何年もVi/Vimを使っている方でも、読めば必ず新しい発見があるはずです。Vimの隠れた能力にきっと驚かされることでしょう。
合わせて読みたいVim関連記事
以下のVi/Vimチュートリアル記事も参考になるかもしれません。
- VimperatorアドオンでFirefoxブラウザにVimの操作性を持たせる方法
- c.vimプラグインでVimをC/C++ IDE化するチュートリアル
- Vimエディタをあらゆるプログラミング言語対応の美しいソースコードブラウザに変える方法
- Vimエディタで使える12の強力な検索・置換の実例集
お知らせ:The Geek Stuffを購読登録していただくと、今後配信されるVi/VimエディタのTipsやトリック情報をお見逃しなくチェックできます。
-
Cockpit(コックピット)で実現するWebベースのLinuxサーバー管理 – インストールから使い方まで徹底解説
Cockpitは、GNU/Linuxサーバー向けの軽量で直感的に操作できるリモート管理ツールです。Webブラウザ経由で対話型のサーバー管理インターフェースを提供し、ライブのLinuxセッションをそのまま操作できます。 RHEL系およびDebian系を中心に、Ubuntu、Linux Mint、Fedora、CentOS、Rocky Linux、AlmaLinux、Arch Linuxなど、幅広いディストリビューションで動作します。 Cockpitを活用すれば、コンテナの起動、ストレージ管理、ネットワーク設定、ログの確認といった日常的なシステム管理タスクを、管理者が簡単かつ確実に実行できるように
-
Linux chmodの再帰的変更:ファイルやディレクトリのパーミッションを一括変更する方法
Linuxのchmodコマンドを使えば、すべてのファイルとディレクトリのパーミッションを再帰的に変更できます。この記事では、その具体的な方法をわかりやすく解説します。 以下のようなエラーに遭遇したことはありませんか? 111 [Permission Denied] Linux-Screw [Permission Denied] Linux-Screw [readonly] システムファイルを編集する場合は、sudoを使うのが基本です。これにより、システムの設定や文脈を壊すことなく安全に編集できます。一方、日常的に扱うユーザーファイルについては、パーミッション自体を変更するのが最適なアプローチで