如何禁用vim中的leader键超时?

18

当我在vim中按下d键时,我的状态行会显示d字母并无限等待进一步的指令。

当我按下我的leader键(对我来说是,),它会等待一段时间后超时。

我该如何禁用这个功能,并使其无限期地等待进一步的指令?


1
:help 'ttimeout' 可以很有用。 - Anton Kovalenko
@AntonKovalenko:清除超时时是否有任何副作用需要我知道?在阅读帮助页面后,timeoutttimeout之间的区别也不太清楚。 - orlp
1
基本上,ESC是箭头和其他控制序列的“领导者”,因此您可能需要按两次ESC而不是一次。 (可能有某种方法可以解决它,但我太懒了,不想再读下去 - 这就是为什么我只给了一个提示而不是发布答案) - Anton Kovalenko
1
@AntonKovalenko:嗯,运行set notimeoutset ttimeout解决了我的问题,如果你把这个作为答案添加进去,你将会得到+1并且被接受的答案。 - orlp
1
@nightcracker:另一个缺点是,如果同时映射,x,xy,因为 Vim 不会区分,x+y或者,xy,所以它会变得非常烦人。但是我不建议以这种方式使用映射。你也可以考虑设置一个较高的超时时间。 - Daan Bakker
1个回答

19

来自:help ttimeout

'timeout', 'to', 'notimeout', 'noto'
boolean (default on)
global
                               
'ttimeout', 'nottimeout'                                               
boolean (default off)
global
{not in Vi}

这两个选项一起确定了当接收到映射键序列或键盘代码的一部分时的行为:

超时 ttimeout 操作
关闭 关闭 不超时
开启 开启或关闭 在:mappings和键代码上超时
关闭 开启 在键码上超时

如果两个选项都关闭,Vim将等待直到完整的映射或键序列已被接收,或者清楚地知道没有映射或键序列与接收到的字符匹配。例如:如果您已经映射了"vl"并且Vim已经接收到'v',则需要下一个字符来判断'v'后面是否跟着'l'。

当其中一个选项开启时,Vim将等待约1秒钟以等待下一个字符到达。此后,已经接收到的字符将被解释为单个字符。等待时间可以通过'timeoutlen'选项更改。

在速度较慢的终端或非常繁忙的系统中,超时可能会导致光标键失灵。如果两个选项都关闭,则Vim在输入后永久等待,如果有以<Esc>开头的键码,则必须键入<Esc><Esc>。如果您没有与键码相关的问题,但希望:mapped键序列不在1秒内超时,请设置'ttimeout'选项并重置'timeout'选项。

注意:当设置了“compatible”时,“ttimeout”会被重置。

来自注释:

基本上,<Esc>是箭头和其他控制序列的“前导符号”,因此您可能需要按两次<Esc>而不是一次。- @Anton Kovalenko

运行set notimeoutset ttimeout解决了我的问题。- @nightcracker


2
请您解释一下为什么设置ttimeout比timeout或timeoutlen更好呢? - aturegano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接