终端仿真器将键盘输入编码为 ANSI 转义序列。
转义键是单个字节:\x1b 删除键是 4 个字节:\x1b
'[
' '3' '~'用户按下 Delete 键和"转义"、"["、"3"、"~"键序列有什么区别?
像 vim 这样的交互式程序如何区分?
终端仿真器和实用程序(如 SSH(如何确保接收程序做出正确解释的方式发送键序列?
时间。
如果字符在足够短的时间跨度内到达,则不太可能单独键入它们。
在 vim 中,选项esckeys
、ttimeout
和ttimeoutlen
确定是否等待转义序列完成以及等待多长时间。这些不是传统的 vi 选项;在传统的VI中,逃生只是逃生,箭头键是无用的。
你可以通过在 vim 中键入 EscOA 或Esc[A非常快来测试这一点。如果你的速度足够快,并且你的终端设置不是太奇特,其中一个将像向上箭头键一样。慢慢地键入相同的东西,它会做一些不同的事情。:set noesckeys
,它永远不会像箭头键一样起作用(即使您实际按下箭头键( - 如果您希望对转义键的响应是即时的,这是您必须付出的代价。
实验可以用其他序列(如您的^[[3~
(完成,但 3 个字符的序列更容易输入。
curses 库在解释终端输入时也使用超时。这里有一个相关的问题:我怎么知道用户在使用 ncurses (Linux( 的控制台中点击了 ESC 键?