この記事は中国語版をもとにした日本語版です。技術用語は、初出では English term(日本語の専門用語)という形で表記します。コマンド、コード、数式、画像、リンク、記事の構成は原文に合わせています。
Neovim の macro programming(マクロプログラミング)は、操作を記録して macro(マクロ)として再生し、繰り返し操作をすばやく実行する機能です。Vim/Neovim で特に実用性が高く、編集効率を大きく上げられます。
✅ Neovim のマクロとは?#
マクロの本質は、Normal mode(ノーマルモード)で行った一連の操作を記録し、再生することです。
マクロを使うと、次のことができます。
- 一連の操作を記録する
- 特定の register(レジスタ、たとえば
a)に保存する @aで繰り返し実行する@@で直前に実行したマクロをもう一度実行する
📌 マクロの基本操作#
| 操作 | コマンド |
|---|---|
| マクロの記録を開始 | q<register>。たとえば qa でレジスタ a に記録する |
| 操作を実行 | 通常どおりコマンドを入力する(dw、j、iHello<Esc> など) |
| 記録を停止 | q |
| マクロを実行 | @a でレジスタ a のマクロを実行する |
| 直前のマクロを繰り返す | @@ |
🛠 例: 各行の最初の単語を削除する#
qa→ レジスタaへの記録を開始する。^dwj→ 行頭 (^) へ移動し、単語を削除 (dw) して次の行 (j) へ移動する。q→ 記録を終了する。@a→ マクロを 1 回実行する。@@→ 直前のマクロをもう一度実行する。10@a→ マクロを 10 回実行することもできます。
📎 コツと注意点#
- マクロには Normal/Insert/Visual mode(ノーマル・インサート・ビジュアルモード)の操作を記録できますが、Lua や Vimscript のコードを直接記録するものではありません。
- マクロの動作は、現在のカーソル位置、レジスタの内容、エディターの状態に左右されます。実行前に状態をそろえておくと安全です。
- Insert mode(インサートモード)で入力した内容もマクロに記録されます。
- 移動には、手動で左右へ移動する
lやhより、0、$、^のような固定的な操作を使うことをおすすめします。カーソル位置の違いによる動作のずれを防げます。
🚀 さらに活用する#
:normalを使うと、複数行にマクロを一括適用できます。:10,20 normal @aLua からマクロを呼び出したり、
vim.api.nvim_feedkeysなどを使って、より高度な一括処理を実装したりできます。
例#
test1 1.txt
test2 2.txt
test3 3.txt
...
test10 10.txtここでは Neovim のマクロ(@a など)でこれらの行を自動生成する方法を、二つのケースに分けて説明します。
✅ ケース 1: 最初の test1 1.txt だけがあり、続きの行を生成したい場合#
この場合は、マクロと Ctrl-a(数値を 1 増やすコマンド)を組み合わせて、各行を自動生成できます。
🪄 操作手順#
最初の行を手動で入力します。
test1 1.txtカーソルを行頭へ移動し、次を実行します。
qa " レジスタ a への記録を開始 yyp " 行全体をコピーして貼り付け w<C-a> " 数字 1 へ移動して 1 増やす(2 になる) w<C-a> " 1.txt の 1 へ移動して 1 増やす(2.txt になる) q " 記録を停止その後、次を実行します。
@a " マクロを 1 回実行 @@ " 直前のマクロを繰り返す(複数回実行可能)
9 回まとめて実行し、9 行追加することもできます。
9@a👀 実行結果#
test1 1.txt
test2 2.txt
test3 3.txt
test4 4.txt
...
test10 10.txt💡 補足説明#
yyp: 行全体をコピーして貼り付ける。w<C-a>: 最初の数字 (1) へ移動し、Ctrl-aで 1 増やす。もう一度
w<C-a>: 次の数字、つまり1.txt内の1へ移動して 1 増やす。形式が 英単語 + 空白 + 数字.txt であれば、このマクロで数字を自動的に進められます。
たとえば、次のように形式が複雑になった場合:
prefix-test01 result_001.txtこのように先頭に 0 が付く形式では、g<C-a>(より高度な Vim のインクリメントコマンド)や Lua を使って一括生成できます。

