Linux vim如何区分ESC键和转义序列的标题?

Linux vim如何区分ESC键和转义序列的标题?,linux,vim,terminal,Linux,Vim,Terminal,当我们按下home键时,vim接收到三个ascii码:\e O H vim如何确定用户按下了home,而不是按下了EscOH 我想到的一种方法是:用一个大count参数读取stdin,然后测试返回值。如果大于1,我们认为它是由函数键生成的转义序列 但是,有一个问题:如果vim在远程服务器上运行,并且用户通过putty操作它。用户想在上面插入一行并插入一个字符H,因此他按下了EscOH。这三次击键被打包成三个网络包并传输到服务器。由于网络拥塞,这些包同时到达。 因此,这三个字符同时出现在vim的s

当我们按下
home
键时,vim接收到三个ascii码:\e O H

vim如何确定用户按下了
home
,而不是按下了
Esc
O
H

我想到的一种方法是:用一个大count参数读取stdin,然后测试返回值。如果大于1,我们认为它是由函数键生成的转义序列

但是,有一个问题:
如果vim在远程服务器上运行,并且用户通过putty操作它。用户想在上面插入一行并插入一个字符
H
,因此他按下了
Esc
O
H
。这三次击键被打包成三个网络包并传输到服务器。由于网络拥塞,这些包同时到达。
因此,这三个字符同时出现在vim的stdin缓冲区中,并被误认为是
home
的转义序列


我不知道vim如何避免此类问题,您有更好的方法吗?

melpomene已经指出了有关
超时的相关
vim
帮助主题


我猜putty也会按时间间隔传递击键


不,
putty
不会做这种事
vim
只能考虑其接收按键序列字符之间的时间间隔,这正是为什么如果连续键入过快或变速器收缩,几个字符可能会无意中被解释为控制序列的原因。

vim根据(可配置)进行猜测定时参数。参见
:h'timeout
:h'ttimeout
:h'tm
:h'ttm
。你可以阅读vim源代码或一个简单的编辑器kilo,我猜putty也会在一定的时间间隔内传递击键,我猜?@weiweishuo你是什么意思?@jww我想如果我把标题改为“我该如何区分…”,你会很满意的。