Vim 如何在插入模式下撤消按Ctrl-U键以避免意外丢失工作

Vim 如何在插入模式下撤消按Ctrl-U键以避免意外丢失工作,vim,Vim,如果您像我一样,经常(像Ctrl+Shift+U 2014输入-),您可能偶尔会意外地出现计时错误并按下Ctrl+U+Shift(按住Ctrl的同时按下U,但就在按下Shift之前) (对我来说,胖手指更容易,因为我通常用左手按所有3个键(我使用Dvorak),这样我就可以把右手放在它们的主键上。) 但是如果您在插入模式下犯了这个错误,您可能会在不经意间永久丢失整行输入,而无法将其取回。等等,沃特 (Ctrl+U“删除当前行中光标前输入的所有字符。”请参见:帮助i\U Ctrl-U或) 按Esc

如果您像我一样,经常(像Ctrl+Shift+U 2014输入
-
),您可能偶尔会意外地出现计时错误并按下Ctrl+U+Shift(按住Ctrl的同时按下U,但就在按下Shift之前)

(对我来说,胖手指更容易,因为我通常用左手按所有3个键(我使用Dvorak),这样我就可以把右手放在它们的主键上。)

但是如果您在插入模式下犯了这个错误,您可能会在不经意间永久丢失整行输入,而无法将其取回。等等,沃特

(Ctrl+U“删除当前行中光标前输入的所有字符。”请参见
:帮助i\U Ctrl-U
或)

按Esc U键不会撤消此删除操作,就像我用dd键删除该行一样(即使在不退出插入模式的情况下按Ctrl+O U键也不起作用)

不用说,如果你只花了几分钟或一个小时写了一个很长的段落(如果你没有插入任何换行符,这将被视为一行),而没有离开插入模式,那么徒劳地按u键可能会非常令人沮丧和不安,希望将您的行取回,但让它恢复到更早的撤消状态!你对值得信赖的编辑vim的信心突然变得支离破碎,因为你悲哀地意识到,你现在必须试着记住你刚刚写的东西,然后重新撰写

我可以想出一些解决办法,试图使编辑更安全,例如尝试记住频繁退出插入模式,以便创建新的撤消块(请参见
:help undo blocks

但是我不应该在写作的时候走得这么仔细。我应该能够保持在流程中(也就是说,在不离开插入模式的情况下保持写作),只要文字保持流动。(可以肯定地说,大多数编辑器都没有这个问题。在大多数编辑器中,“撤消”会一次撤消一个字符的更改,因为它们无法将多个字符分组为一个“插入”)

因为我可能不记得要这么小心了,所以我最终只是在插入模式下完全禁用了Ctrl-U,现在是这样:

imap <C-U> <Nop>
imap


但我想知道的是,如果我想使用Ctrl-U,是否有合适的方法使其仍然有效,但要创建一个撤消状态,以便使用U轻松撤消删除。这可能吗?(为什么这不是默认行为?

请看,谢谢,这正是我想要的!很高兴看到有一种方法可以从
寄存器(
:echo@.
)中获取删除的文本。呸!对维姆的信心恢复了。请随意将其作为答案发布。您使用的是什么版本的vim?在这里的评论中看到答案之前,我试图重现您的问题,并使用我的vim 8.1
Esc u
撤消了
Ctrl-u
并将文本返回给我。如果您使用的是旧版本的vim,我建议升级,在最近的版本中已经修复了一些bug和恼人的问题。啊,刚刚在vim 7.4上进行了测试,我在其他地方也有,我确实看到了你的问题。所以我想说,如果你能更新vim,那将是你最好的解决方案。