Vim 如何将两个操作合并为一个(使其可由';';重复并可立即撤消)

Vim 如何将两个操作合并为一个(使其可由';';重复并可立即撤消),vim,undo,Vim,Undo,考虑一个简单的例子:比方说,我只是键入foo,然后按左键,然后键入bar。现在我有了fobaro 当我按下按钮时。键,仅重复条部分,撤消时也是如此 所以我想在按下时重复整个fobaro,并在按下u时立即完全解开 我正在编写插件(),它可以实现一些类似的技巧,我希望它不会破坏撤消历史。我不知道如何将其与您的插件联系起来,但听起来您可以只录制一个宏- qq i foo<esc><Left> i bar<esc> q 重复is当您在插入模式下移动光标时,Vim开始

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

当我按下按钮时。键,仅重复
部分,撤消时也是如此

所以我想在按下时重复整个
fobaro
,并在按下u时立即完全解开


我正在编写插件(),它可以实现一些类似的技巧,我希望它不会破坏撤消历史。

我不知道如何将其与您的插件联系起来,但听起来您可以只录制一个宏-

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

重复is

当您在插入模式下移动光标时,Vim开始新的更改;它不能重复复杂的编辑序列,只能键入文本。想象一下复杂的光标移动,因为它们通常不能重复,Vim也不能处理像
这样的简单(且可行)的事情

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


也许现有的众多解决方案中有一个很聪明。

这听起来像是一份适合你的工作!不,repeat.vim在需要重复精确映射时非常有用。但是在这里(顺便说一句,这是插件“自动配对”键),我必须重复用户在插件“按下”键之前键入的所有内容,之后也必须重复,因此,我必须重新映射退出插入模式的所有方法,然后重复。vim所有用户键入的内容如果您的插件使用
命令,然后
:undojoin
可能就是您所需要的。@benjifisher它只能解决撤消问题<代码>:撤消连接不会改变dot将重复的内容。
@@