Neovim 的「宏编程」就是通过录制并使用宏(macro)来快速执行重复性操作。它是 Vim/Neovim 中非常实用、效率极高的功能之一。
✅ 什么是 Neovim 的宏?
宏本质上是:你在 Normal 模式下的操作序列的录音回放。
你可以:
- 录制一系列操作
- 保存到某个寄存器(比如
a) - 通过
@a来重复执行 - 还可以用
@@重复上一次宏调用
📌 宏的基本使用步骤:
| 动作 | 命令 |
|---|---|
| 开始录制宏 | q<寄存器> 例如 qa 开始录到寄存器 a |
| 执行操作 | 你正常地输入命令(比如 dw, j, iHello<Esc> 等) |
| 停止录制 | q |
| 执行宏 | @a 执行寄存器 a 的宏 |
| 重复执行上一个宏 | @@ |
🛠 示例:删除每一行的第一个单词
qa→ 开始录制到a^dwj→ 移动到行首 (^),删除一个词 (dw),跳到下一行 (j)q→ 结束录制@a→ 执行一遍宏@@→ 再次执行刚才的宏- 也可以:
10@a→ 执行 10 次
📎 技巧和注意事项:
- 宏只能录制 Normal/Insert/Visual 模式下的操作,不能直接录制 Lua 或 Vimscript。
- 宏操作受当前光标位置、寄存器内容、编辑器状态影响,操作前最好保证状态一致。
- 如果你在 Insert 模式下输入内容,宏也会录进去。
- 宏中的移动建议用固定逻辑(例如
0,$,^)而非手动左右移动(如l,h),避免光标状态不同导致行为异常。
🚀 想更强?可以结合:
-
:normal批量应用宏到多个行,比如::10,20 normal @a -
Lua 中调用宏或用 Lua 实现更强的批处理(如使用
vim.api.nvim_feedkeys)
示例
test1 1.txt
test2 2.txt
test3 3.txt
...
test10 10.txt
你想借助 Neovim 宏编程(比如使用 @a)自动生成这些行。我们来分两种情况:
✅ 情况一:你只有第一行 test1 1.txt,想生成接下来的行
这种情况,我们可以借助宏 + Ctrl-a(数字加一命令)来自动生成每一行!
🪄 操作步骤如下:
-
手动输入第一行:
test1 1.txt -
移动光标到行首,执行:
qa " 开始录制宏到寄存器 a yyp " 复制整行并粘贴 w<C-a> " 移动到数字1,加1(变成2) w<C-a> " 再往后移动到 1.txt 中的1,再加1(变成2.txt) q " 停止录制 -
然后执行:
@a " 执行宏一次 @@ " 重复上一次宏(可以多次按)
或者批量执行 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(即1.txt中的1) -
只要你的格式是 英文单词+空格+数字.txt,这套宏就能自动推进
如果你之后格式变复杂,比如:
prefix-test01 result_001.txt
这种带前导零的情况,也可以用 g<C-a>(更高级的 Vim 自增命令)或 Lua 批量生成