Skip to content

Vim - 宏

Vim 的宏功能允许你录制一系列 Normal 模式(普通模式)命令并回放它们。这对于自动化重复编辑任务非常强大。宏存储在 Vim 的寄存器中。

本章内容包括:

  • 如何开始录制宏。
  • 执行要录制的 Vim 操作。
  • 如何停止录制。
  • 如何回放(执行)已录制的宏。

要开始录制宏,在 Normal 模式下按 q,然后按一个字母(a-z),这个字母将作为宏的名称(寄存器)。例如,要开始将宏录制到寄存器 a 中:

qa

按下 qa 后,Vim 会在命令行区域显示 recording @a,表示它正在将你的按键序列录制到寄存器 a 中。

录制开始后,执行任何你想包含在宏中的 Normal 模式命令、Insert 模式(插入模式)输入或 Ex 命令。Vim 会录制这些操作。

示例:假设你想要一个宏,它能复制当前行,并在新行的开头加上 ‘DEBUG: ’。

  • 按下 qa 后:
  • Y(复制当前行 - yy 的另一种方式)
  • p(在下方粘贴该行)
  • O(在当前行上方打开新行并进入 Insert 模式 - 光标现在在新粘贴的行上)
  • 输入 DEBUG:
  • 按下 Esc(返回 Normal 模式)

要停止录制宏,只需在 Normal 模式下再次按下 q。

q

命令行中的 recording @a 消息将消失。你执行的命令序列现在已存储在寄存器 a 中。

你可以使用 :registers 命令或 :reg <registername> 查看寄存器的内容(也就是你的宏)。例如:

:reg a

这将显示录制在寄存器 a 中的按键序列。

要回放(执行)存储在寄存器中的宏,使用 @ 命令,后跟寄存器名称。对于我们示例中存储在寄存器 a 中的宏:

@a

Vim 将执行该命令序列。要执行同一个宏多次,在命令前加上次数。例如,要执行寄存器 a 中的宏 10 次:

10@a

要回放最后执行的宏,可以使用 @@。

如果你想向现有宏添加更多命令,可以使用对应寄存器的大写字母进行录制。例如,要向寄存器 a 中的宏追加命令,你可以使用 qA 开始录制。

实际应用:宏对于以下任务非常有用:转换列表项、对多行应用一致的格式更改、重构重复的代码模式或生成模板代码(boilerplate code)。例如,如果你有一个函数名称列表,并且想将每个名称转换为 Javadoc 风格的注释存根。