我在insert mode
,然后我可能会输入一个数字,然后快速 ESC ,因为我停止输入所以它会更改为visual mode
。
然后发生的是cursor
跳跃,不仅如此,我所在的线上的数字(我刚刚输入)也会减少。
这件事是个噩梦!
这是某种默认行为吗?如果是这样,我该怎么禁用它? 这可能是一个引起它的插件吗?因为我并不总是有这个"功能"。 几个月来我一直试图找出造成这种情况的原因,并且我已经发布了generic question。
特别是在编程时,数字自动减少会引起很多麻烦,所以我通过映射<C-a> <Nop>
中的.vimrc
来禁用它的默认映射。更多信息here。
答案 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?
它们中的每一个都会告诉您选项的当前值,但更重要的是它会告诉您最后一个更改值的文件的名称。