我在寄存器q
中记录了递归宏,它将行中的每个字符加倍:^Vypl@q
,因此它将abcde
更改为aabbccddee
。
现在我想用A]^[I[^[
括号括起结果,结果是[aabbccddee]
。该宏记录在寄存器w
中。
问题是,当我在代码@q@w
的寄存器e中记录宏时,只处理第一个宏。似乎@q中递归的结束甚至会破坏执行它的宏。有没有办法正确创建宏?或者有更好的方法如何做同样的事情? (我有几行应该执行)
答案 0 :(得分:2)
为什么要制作这么多嵌套宏?
为什么不直接:
:s/./&&/g|s/^/[/|s/$/]
如果您喜欢宏,则可以将上面的命令记录为宏注册。
答案 1 :(得分:1)
是的,递归宏的中止会取消所有挂起的命令,而不仅仅是来自该宏的命令。您可以通过:normal
提交两个宏执行来避免这种情况:
:exe 'normal! @q' | normal! @w