我只是使用<C-r>从错误的寄存器粘贴了文本,我有两个选择:


手动删除我刚刚粘贴的内容并重新开始。
切换到普通模式,按u并丢失我在按<C-r>之前输入的文字。

还有更好的方法吗?
/>

#1 楼

Vim提供了有限的能力来使用Ctrl-G u命令指定不可撤消更改的范围,这会破坏撤消顺序。请参见

:help i_CTRL-G_u


对于您而言,解决方案是像这样重新映射<C-R>:键入<C-O>u只会撤消自键入<C-R>以来所做的更改。请参见

:inoremap <C-R> <C-G>u<C-R>


评论


太好了,我不知道这个命令。在键入 u和在屏幕上查看结果之间存在相当长的延迟(大约4秒钟),关于如何摆脱它的任何想法吗?

– zool
15年8月28日在8:35

我也注意到了。我不知道;我会尝试找出答案。

–加里约翰
15年8月28日在14:49

嘿,您可能是说(回车)而不是(ctrl-r)吗?

–德文特
18'八月7'在1:31



否。最初的问题与的行为有关,因此这就是映射所使用的。但是,您可以在该映射中用替换,以使撤消序列被中断。可以在:help i_CTRL-G_u中找到更多示例。

–加里约翰
18年8月7日在6:11



#2 楼

在插入模式下:


如果粘贴的文本小于一行(这就是第二点所指),只需按<C-u>即可删除当前行中光标之前的所有字符。 br />如果粘贴的文本多于一行,则您的第二个解决方案将更好地工作,其适应性如下:<C-o>u。它们实际上与您提出的解决方案相同,只是将其简化了一些:)

#3 楼

您可以尝试<C-w>(在左侧删除一个单词)或<C-u>(在按下一次时清除光标之前的字符,再次按下时删除换行符)。请参阅:help i_CTRL-W:help i_CTRL-U

如果从寄存器中粘贴很多内容,撤消更改当然更快,则可以对<C-o>使用insert-normal-mode(执行一个普通模式命令,然后返回插入模式)。

通常,经常返回正常模式将编辑分成小块是有帮助的,这样您可以细粒度地撤消操作。