禁用esc键超时

时间:2017-07-03 16:54:15

标签: vim keyboard-shortcuts shortcuts

问题

我在insert mode,然后我可能会输入一个数字,然后快速 ESC ,因为我停止输入所以它会更改为visual mode。 然后发生的是cursor跳跃,不仅如此,我所在的线上的数字(我刚刚输入)也会减少。 这件事是个噩梦!

造成这种情况的原因是什么?

这是某种默认行为吗?如果是这样,我该怎么禁用它? 这可能是一个引起它的插件吗?因为我并不总是有这个"功能"。 几个月来我一直试图找出造成这种情况的原因,并且我已经发布了generic question

特别是在编程时,数字自动减少会引起很多麻烦,所以我通过映射<C-a> <Nop>中的.vimrc来禁用它的默认映射。更多信息here

1 个答案:

答案 0 :(得分:4)

您的问题似乎与'timeout'选项及其朋友'timeoutlen''ttimeout''ttimeoutlen'相关联。

尝试此命令:

:set timeout timeoutlen=3000 ttimeoutlen=100

取自:h 'ttm

  

超时仅在'timeout'和'ttimeout'选项时发生     这么说。一个有用的设置是:set timeout timeoutlen = 3000   ttimeoutlen = 100(三秒后映射超时,超时   十分之一秒后的关键代码。)

就个人而言,我使用这些设置:

set timeout
set ttimeout
set timeoutlen=3000
set ttimeoutlen=50

前两个命令分别启用映射和密钥代码的超时。

第3个命令set timeoutlen=3000告诉Vim等3s让我完成输入映射的左侧。

第4个命令set ttimeoutlen=50告诉Vim仅等待50ms完成一系列密码。例如,在我的计算机上,F1生成一系列密钥代码Escape O P(通过在插入模式下键入C-v F1确认,其中显示^[OP; ^[代表Escape)。

原始问题可能来自于'ttimeoutlen'选项的值过高这一事实,因此一系列密钥代码的超时不会很快发生,允许Vim有时解释您键入的键击序列,由您未按下的其他键生成。通过降低其价值,您可以防止这种情况。

即使您在vimrc中设置了以前的选项,问题仍然存在,但之后插件可能会更改它们。

在这种情况下,当您的问题再次出现时,请键入以下命令:

:verb set timeout?
:verb set ttimeout?
:verb set timeoutlen?
:verb set ttimeoutlen?

它们中的每一个都会告诉您选项的当前值,但更重要的是它会告诉您最后一个更改值的文件的名称。