如何在Vim中调用递归宏后记录文本修改

时间:2014-10-21 09:58:53

标签: vim macros

我在寄存器q中记录了递归宏,它将行中的每个字符加倍:^Vypl@q,因此它将abcde更改为aabbccddee

现在我想用A]^[I[^[括号括起结果,结果是[aabbccddee]。该宏记录在寄存器w中。

问题是,当我在代码@q@w的寄存器e中记录宏时,只处理第一个宏。似乎@q中递归的结束甚至会破坏执行它的宏。有没有办法正确创建宏?或者有更好的方法如何做同样的事情? (我有几行应该执行)

2 个答案:

答案 0 :(得分:2)

为什么要制作这么多嵌套宏?

为什么不直接:

:s/./&&/g|s/^/[/|s/$/]

如果您喜欢宏,则可以将上面的命令记录为宏注册。

答案 1 :(得分:1)

是的,递归宏的中止会取消所有挂起的命令,而不仅仅是来自该宏的命令。您可以通过:normal提交两个宏执行来避免这种情况:

:exe 'normal! @q' | normal! @w