如何取消在 Vim 中录制宏?

Ale*_*xey 12 vim macros

想象一下,我录制了一个宏,然后我偶尔开始将宏录制到同一个寄存器中。我可以中断录制以便将原始宏保留在寄存器中吗?

我知道我可以:let @b=@a将宏从寄存器 a 复制到寄存器 b 从而保留它,但也许有更直接的方法?

a.l*_*l.e 12

正如@Trendfischer 在他的评论中所指出的,vim 当前的行为不是(不再?)在第一次按下q.

现在,如果您选择了错误的寄存器,您可以执行以下操作:

  • 不要退出录音模式(暂时),
  • 创建一个空行,
  • 粘贴您要覆盖的寄存器(如果您在q寄存器中记录,则为"qp),
  • 现在退出录音模式 ( q)
  • 选择您在上面粘贴的行(没有行尾标记:0v$h;不要使用V
  • 将它拉到您覆盖的寄存器中("qy如果您正在使用q寄存器;再次:不要使用行明智的副本Y)。
  • 现在您的旧宏回到了寄存器中,您可以在正确的寄存器中重新开始录制新宏。

当然,稍加努力,您就可以拯救旧的和新的宏(但您必须在第二次按下 之前开始该过程q):只需粘贴您录制的内容并猛拉到“新”/“正确”注册。


rom*_*inl 6

当您录制宏时,寄存器首先被清空并在您进行时填充,因此在您进行另一次录制中途时,不太可能存在保存先前宏的内置方法。一种不涉及在 周围编写包装器的方法q,即。

我和很多人都使用临时寄存器(@q例如)来记录我们所有的一次性录音。也许你也应该。

  • `:let @b=@q` 肯定有效,所以当你开始录制宏时寄存器被清除是不正确的。而且我确实使用 q 寄存器作为一次性宏。而且很可能我偶尔可以覆盖它。 (4认同)
  • 也许这种行为发生了变化,我用 vim 7.4 对其进行了测试,并且该寄存器在我第二次按下 `q` 之前是可用的。所以`:let @b=@a` 是迄今为止最好的答案。 (2认同)