终端中Shift +箭头键的历史记录是什么?
我想知道为什么Shift + 箭头键会产生A
, B
, C
或D
字母之一。
为什么不用其他字母? 为什么要写任何一封信?
诸如gnome-terminal
(Ubuntu中的“终端”)之类的终端仿真器以及xterm
和urxvt
被命名为“仿真器”,因为它们再现了作为计算机唯一显示器的旧终端的行为。 这些终端与基于文本的协议与计算机通信,并且最初被设计为仅接收文本。 很快,需要更多控制:如何擦除线? 用颜色? 或者改变光标位置?
来源: Unix可用性的艺术 – 命令行界面
逃生序列是为每个终端设计的。 它们被命名为escape,因为它们以ASCII转义码开头: 33
。 没有办法直接打印这样的字符,这使得它非常适合这样的序列。 当我们仍然想要显示这个被删除的时候, ^[[
被使用,这就是我将在我的解释中使用的内容。
当终端收到^[[A
,它并不意味着“打印^ [[A”,但“用户按下向上箭头键”)。 “A”在这里是完全随意的:它恰好是每个人都同意的信,因为这就是DEC VT-52及其后续流行的VT-100终端所使用的。
资料来源:DEC VT-52维护手册1976
这仍然是终端模拟器今天工作的方式:取决于$TERM
变量,名为terminfo
的数据库负责说明应该将哪些代码发送到shell(bash,sh,zsh …),然后负责理解他们并对他们做出反应。
现在, Shift + up的代码碰巧是^[[1;2A
:终端模拟器将此代码发送到shell,它试图解释^[[1;2
但不显示任何内容,因为它不知道那个逃脱序列。 但是A
留下并显示出来。