如何将两个动作连接成一个(使其可以通过'。'重复并且可以立即撤消)

时间:2013-12-31 21:31:47

标签: vim undo

考虑一个简单的例子:比如说,我只输入foo,然后按键,然后输入bar。现在我有fobaro

当我按键时,只重复bar部分,同样是撤消。

所以当我按时,我想要重复整个fobaro,当我按 u 时,我要立即完全解除。

我只是在编写插件(auto-pairs-gentle),这样做会有一些技巧,我希望它不会破坏撤消历史记录。

2 个答案:

答案 0 :(得分:1)

我不知道如何将它与你的插件联系起来,但听起来你只能记录一个宏 -

qq
i
foo<esc><Left>
i
bar<esc>
q

然后

@@

重复是

答案 1 :(得分:0)

当您在插入模式下移动光标时,Vim会开始一个新的更改;它不能重复复杂的编辑序列,只能输入文本。想想复杂的光标移动,因为那些通常不会重复,Vim始终也不会像<Left>一样处理简单(和可行)的事情。

对于您的插件,您可以尝试使用较低级别的功能,例如cursor()setline()。尽管如此,这仍然可能会破坏文本插入的重复(至少它会错过任何低级修改)。你在这里达到了Vimscript的限制。

许多现有的auto-close plugins中的一个可能有一个聪明的解决方法。