禁用 esc 键超时
Disable timeout on esc key
问题
我在insert mode
,然后我可能会输入一个数字,然后快速ESC,因为我停止输入所以它会变成visual mode
.
然后发生的是 cursor
跳转,不仅如此,我所在的行(我刚刚输入)的数字也减少了。
这是一场噩梦!
这是什么原因造成的?
这是某种默认行为吗?如果是这样,我该如何禁用它?
这可能是导致它的插件吗?因为我并不总是有这个"feature"。
几个月来我一直在努力弄清楚是什么原因造成的,我已经发布了这个 generic question.
特别是在编程时,数字自动递减会引起很多麻烦,所以我禁用了它的默认映射,通过在我的 .vimrc
中映射 <C-a> <Nop>
;更多信息 .
您的问题似乎与 'timeout'
选项及其朋友 'timeoutlen'
、'ttimeout'
、'ttimeoutlen'
.
有关
试试这个命令:
:set timeout timeoutlen=3000 ttimeoutlen=100
取自:h 'ttm
:
The timeout only happens when the 'timeout' and 'ttimeout' options
tell so. A useful setting would be :set timeout timeoutlen=3000
ttimeoutlen=100 (time out on mapping after three seconds, time out
on key codes after a tenth of a second).
就个人而言,我使用这些设置:
set timeout
set ttimeout
set timeoutlen=3000
set ttimeoutlen=50
前 2 个命令分别启用映射和键码超时。
第三个命令 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?
它们中的每一个都会告诉您选项的当前值,但更重要的是它会告诉您更改值的最后一个文件的名称。
问题
我在insert mode
,然后我可能会输入一个数字,然后快速ESC,因为我停止输入所以它会变成visual mode
.
然后发生的是 cursor
跳转,不仅如此,我所在的行(我刚刚输入)的数字也减少了。
这是一场噩梦!
这是什么原因造成的?
这是某种默认行为吗?如果是这样,我该如何禁用它? 这可能是导致它的插件吗?因为我并不总是有这个"feature"。 几个月来我一直在努力弄清楚是什么原因造成的,我已经发布了这个 generic question.
特别是在编程时,数字自动递减会引起很多麻烦,所以我禁用了它的默认映射,通过在我的 .vimrc
中映射 <C-a> <Nop>
;更多信息
您的问题似乎与 'timeout'
选项及其朋友 'timeoutlen'
、'ttimeout'
、'ttimeoutlen'
.
试试这个命令:
:set timeout timeoutlen=3000 ttimeoutlen=100
取自:h 'ttm
:
The timeout only happens when the 'timeout' and 'ttimeout' options tell so. A useful setting would be :set timeout timeoutlen=3000 ttimeoutlen=100 (time out on mapping after three seconds, time out on key codes after a tenth of a second).
就个人而言,我使用这些设置:
set timeout
set ttimeout
set timeoutlen=3000
set ttimeoutlen=50
前 2 个命令分别启用映射和键码超时。
第三个命令 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?
它们中的每一个都会告诉您选项的当前值,但更重要的是它会告诉您更改值的最后一个文件的名称。