假设我已录制了一个宏,然后我偶尔开始将宏录制到同一个寄存器中。我可以中断录制,以便将原始宏保留在寄存器中吗?
我知道我可以将:let @b=@a
宏从寄存器 a 复制到寄存器 b 从而保存它,但也许有更直接的方法?
答案1
录制宏时,寄存器首先被清空,然后才被填充,因此,当您正在录制另一个宏时,不太可能存在内置方法来保存上一个宏。q
也就是说,这种方法不需要编写包装器。
我和许多人都使用临时寄存器(@q
例如)来记录我们所有的一次性录音。也许你也应该这样做。
答案2
正如 @Trendfischer 在其评论中所指出的,vim 的当前行为不再是第一次按下时清空寄存器q
。
现在,如果您选择了错误的寄存器,您可以执行以下操作:
- 暂时不要退出录音模式,
- 创建一个空行,
- 粘贴要覆盖的寄存器(如果在寄存器中记录
q
,则为"qp
), - 现在退出录音模式(
q
) - 选择上面粘贴的行(没有行尾标记:
0v$h
;不要使用V
) - 将其拉到您已覆盖的寄存器中(
"qy
如果您正在使用该q
寄存器;再次强调:不要使用逐行复制Y
)。 - 现在,您已将旧的宏放回寄存器中,并且您可以在正确的寄存器中重新开始录制新的宏。
当然,只需稍加努力,您就可以挽救旧的和新的宏(但您必须在第二次按下之前启动该过程)q
:只需粘贴您已录制的内容并将其拉入“新的”/“正确的”寄存器中。