メインコンテンツへスキップ
  1. ノート/
  2. Vim / Neovim/

Neovim macro

·1067 文字·3 分· loading · loading · · ·
ICE345
著者
ICE345
CS Student | System | Linux | OCaml
この記事は中国語版をもとにした日本語版メモです。コマンド、コード、数式、画像リンクは原文の意味を壊さないように保持し、説明文と見出しを日本語向けに整理しています。

Neovim 的「宏编程」つまり通过录制并使用宏(macro)来快速执行重复性操作。它是 Vim/Neovim 中非常实用、效率极高的功能之一。


✅ 什么是 Neovim 的宏?
#

宏本质上是:你在 Normal 模式下的操作序列的录音回放。

你できます:

  • 录制一系列操作
  • 保存到某个寄存器(比如 a
  • 通过 @a 来重复执行
  • 还できます用 @@ 重复上一次宏调用

📌 宏的基本使用手順:
#

动作コマンド
开始录制宏q<寄存器> たとえば qa 开始录到寄存器 a
执行操作你正常地输入コマンド(比如 dw, j, iHello<Esc> 等)
停止录制q
执行宏@a 执行寄存器 a 的宏
重复执行上一个宏@@

🛠 例:削除每一行的第一个单词
#

  1. qa → 开始录制到 a
  2. ^dwj → 移动到行首 (^),削除一个词 (dw),跳到下一行 (j)
  3. q → 结束录制
  4. @a → 执行一遍宏
  5. @@ → 再次执行刚才的宏
  6. 也できます: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(数字加一コマンド)来自动生成每一行!

🪄 操作手順以下:
#

  1. 手动输入第一行:

    test1 1.txt
  2. 移动光标到行首,执行:

    qa             " 开始录制宏到寄存器 a
    yyp            " 复制整行并粘贴
    w<C-a>         " 移动到数字1,加1(变成2)
    w<C-a>         " 再往后移动到 1.txt 中的1,再加1(变成2.txt)
    q              " 停止录制
  3. その後执行:

    @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 批量生成