如何撤消击键(VIM)

如何撤消击键(VIM),vim,Vim,当一个人不小心按下一个键时,Vim的撤销系统会变得有些麻烦 改变模式 执行多个操作 是否有一种方法可以将vim恢复到按键前vim所处的状态(光标位置、模式和文本缓冲区) 要详细说明这一点,请假设我处于插入模式,然后按Return或o, 使用我当前的。vimrc将保留当前缩进。这就是我想要的-但这意味着撤销意外按键不再是一个单一的操作(在这种情况下,我必须按下Esc,u)。Vim的撤销系统非常强大(具有撤销分支等),但它仍然局限于文本更改。相反,编辑器状态(当前模式、缓冲区等)没有被覆盖;与

当一个人不小心按下一个键时,Vim的撤销系统会变得有些麻烦

  • 改变模式
  • 执行多个操作
是否有一种方法可以将vim恢复到按键前vim所处的状态(光标位置、模式和文本缓冲区)


要详细说明这一点,请假设我处于插入模式,然后按
Return
o

使用我当前的
。vimrc
将保留当前缩进。这就是我想要的-但这意味着撤销意外按键不再是一个单一的操作(在这种情况下,我必须按下
Esc,u
)。

Vim的撤销系统非常强大(具有撤销分支等),但它仍然局限于文本更改。相反,编辑器状态(当前模式、缓冲区等)没有被覆盖;与撤消有关的任何更改只有在它们是撤消的文本更改的副作用时才会发生(例如,当您撤消删除时,光标移回以前删除的范围)

很难想象一个具有您描述的功能的撤销系统会如何工作,但我想额外的“更改”会让人困惑,而不是有帮助,所以我认为这是不可取的

如果您偶尔对模式更改或意外执行映射感到惊讶,请尝试改进设置,例如通过:

  • 清晰地突出显示当前模式(像Airline这样的插件在statusline中突出显示,包括颜色更改)
  • 通过
    显示部分映射:设置showcmd
  • 增加
    'timeoutlen'
    ,以便有更多时间键入(长)映射
  • 重新构造映射,使其更易于键入,或者更喜欢自定义命令而不是映射(避免超时问题)