Vim 技巧 - 加次数回放宏
对于重复次数不多的工作,点范式是一种高效的编辑策略,但它不能指定执行的次数。为了克服该限制,我们可以录制一个简单的、一次性的宏,然后再加次数进行回放。
在技巧以退为进中,我们用点范式处理过这行文本:

现在,我们打算把它变成这个样子:
使用点范式,意味着完成这个任务只需简单地重复执行几次 ;. 命令。但如果在更大范围内遇到这种问题,该怎么办呢?
当然,我们仍然可以使用点范式,但这需要调用那么多次 ;. 命令才能完成任务,工作量似乎也不小。有什么方法能让我们用次数的方式执行呢?
人们很自然地想到 11;. 应该能完成这项工作,但实际上它不管用。因为 Vim 会先运行 11 次 ; 命令,再运行 1 次 . 命令。类似地,如果我们运行 ;11. 的话,错误会更明显,因为它会指示 Vim 先调用 1 次 ;,再调用 11 次 .。而我们的真正目的是要运行 11 次 ;.。
通过录制一个最简单的宏,我们可以模拟执行 11 次的 ;.,即 qq;.q。首先,qq 将指示 Vim 录制后续的按键操作并将它们保存至寄存器 q 中。然后,我们再输入命令 ;.。最后,我们按下 q 键结束宏的录制。现在可以加上次数 11 执行这个宏 11@q,即执行 11 次 ;.。
让我们归纳一下步骤
; 命令会重复 f+ 的查找动作。当光标移到文本行最后一个字符 + 后面时,动作命令 ; 将会执行失败,宏随即中止执行。

在本例中,我们打算将这个宏执行 10 次。但如果回放 11 次的话,最后一次执行将会被中止。换句话说,只要我们用大于或等于 10 的次数调用该宏就可以完成任务了。
谁愿意坐在那里精确计算一个宏需要被执行多少次呢?反正我不愿意。为了完成该任务,我宁愿估算一个足够大的次数。出于懒惰的缘故,我通常用 22 这个数字,因为在我的键盘上,字符 @ 与 2 在同一个键上,容易输入。
注意:不是每个宏都能用估算次数的方法调用。本例之所以可以这样,是因为该宏本身隐含了一种内置的安全捕获机制。如果在当前行找不到下一个 + 号时,; 动作命令会失败。