当我们按下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 已经指出了有关 timeout
的相关 vim
帮助主题。
So putty also transfers keystrokes time intervals, I guess?
不,putty
不会做这样的事情。 vim
只能考虑接收按键序列字符之间的时间间隔,这就是为什么如果连续键入的字符太快,可能会无意中将多个字符解释为控制序列的原因,或通过传输签约。
关于linux - vim 如何区分 ESC 键和转义序列头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51299264/