vim如何从转义序列的头中区分ESC键?

时间:2018-07-12 07:07:00

标签: linux vim terminal

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

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

我想到的一种方法是:用大的 count 参数对标准输入进行read()消耗,测试返回值。如果大于1,我们认为这是由功能键生成的转义序列。

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

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

1 个答案:

答案 0 :(得分:3)

melpomene已经指出了与vim相关的timeout帮助主题。

  

所以,我猜腻子还会传递击键时间间隔?

不,putty不会这样做。 vim只能考虑两次接收键序列的字符之间的时间间隔,而这正是为什么几个字符以太快的连续性键入或收缩时会无意中将其解释为控制序列的原因。传输。