【问题标题】:In Vim, why is temporary Normal Mode (Ctrl-O from Insert Mode) executing commands much slower?在 Vim 中,为什么临时普通模式(插入模式下的 Ctrl-O)执行命令要慢得多?
【发布时间】:2016-05-29 00:04:57
【问题描述】:

通常,当我想在 Vim 中编辑文本时撤消更改时,我必须:

  1. 使用Esc 退出插入模式
  2. u 撤消更改
  3. 使用各种命令(io 等...)进入插入模式

现在,我只是一个初学者,但我知道在插入模式下,您可以通过使用 Ctrl-O 暂时退出一个命令进入普通模式。

知道了这一点,当我想撤消对文本的更改时,我想:为什么不直接进入临时普通模式并按u 而不必处理Esc 的所有恶作剧并在模式之间切换?

所以我做了以下事情:

  1. 使用Ctrl-O 为一个命令转入临时正常模式
  2. u 撤消更改
  3. 我自动处于插入模式并继续编辑。

它有效...除了它非常非常。慢。 执行撤消后,光标将立即放置在该位置,但文本中的更改直到大约 2 秒后才会显示。时间很长。

我认为这只是我的计算机由于某种原因运行缓慢,但我采用了老派的方式并且立即执行了撤消操作。当然,并非所有命令都是这种情况。当我尝试 dd 并删除整行时,它会按预期工作 - 立即。

所以我的问题是:为什么?临时正常模式与按下Esc 进入的正常模式不同吗?它是否与缓冲区、交换文件或幕后发生的任何事情有关?是不是undo在Vim编辑器中的实现方式?

【问题讨论】:

    标签: vim


    【解决方案1】:

    看起来 Vim 正在等待可能的第二次按键,即命令的动作(例如,dw,它正常执行)。显然u 命令没有动作,但双击uu 确实快速执行撤消,然后将下一个 u 插入到文档中。我怀疑这是“临时正常模式”如何决定何时返回“插入模式”的一个怪癖。

    【讨论】:

    • 我几乎认为这是一个错误
    • 这很可能是一个错误。您的回答似乎很有意义……但是我尝试在临时普通模式下使用x 删除单个字符。它立即生效。
    • 哈哈,女朋友当然!我无法理解为什么它会这么慢。我们说要等待 2 到 3 秒。我认为删除命令执行起来要快得多,因为您只是在删除。对于撤消,Vim 可能将最后的更改存储在某处(.swp 文件)并且必须访问它。即使是这种情况,为什么临时正常模式会使命令减慢如此幅度?这几乎是疯了。总之,我什至不知道撤销操作是如何在计算机中实现的,所以我的“理论”是假的。
    猜你喜欢
    • 2018-12-30
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2019-06-08
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多