linux - vim 如何区分 ESC 键和转义序列头?

标签 linux vim terminal

当我们按下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/

相关文章:

PHP fatal error : Class 'Inflector' not found

linux - 视觉上改进 emacs

c++ - 将 Vim 设置为基本的 C++ 编辑器

git、vimdiff 和 dirdiff

node.js - 为 repl 提示( Node )添加颜色

linux - 每次程序终止时运行的 cron 中的 Bash 程序

linux - 将任何当前目录 './' 添加到 Linux 中的搜索路径

linux - 当 Windows PATH 的文件夹名称带有空格时,WSL(Windows 子系统 linux)会破坏 $PATH

vim - 将两个 $ 符号之间的所有内容替换为\( 和\) 之间的文本

c++ - 选择性抑制输出到终端 C++。