终端中Shift +箭头键的历史记录是什么?

我想知道为什么Shift + 箭头键会产生ABCD字母之一。

为什么不用其他字母? 为什么要写任何一封信?

诸如gnome-terminal (Ubuntu中的“终端”)之类的终端仿真器以及xtermurxvt被命名为“仿真器”,因为它们再现了作为计算机唯一显示器的旧终端的行为。 这些终端与基于文本的协议与计算机通信,并且最初被设计为仅接收文本。 很快,需要更多控制:如何擦除线? 用颜色? 或者改变光标位置?

VT-100终端 来源: Unix可用性的艺术 – 命令行界面

逃生序列是为每个终端设计的。 它们被命名为escape,因为它们以ASCII转义码开头: 33 。 没有办法直接打印这样的字符,这使得它非常适合这样的序列。 当我们仍然想要显示这个被删除的时候, ^[[被使用,这就是我将在我的解释中使用的内容。

当终端收到^[[A ,它并不意味着“打印^ [[A”,但“用户按下向上箭头键”)。 “A”在这里是完全随意的:它恰好是每个人都同意的信,因为这就是DEC VT-52及其后续流行的VT-100终端所使用的。

DEC VT-52维护Manuel 1976

资料来源:DEC VT-52维护手册1976

这仍然是终端模拟器今天工作的方式:取决于$TERM变量,名为terminfo的数据库负责说明应该将哪些代码发送到shell(bash,sh,zsh …),然后负责理解他们并对他们做出反应。

现在, Shift + up的代码碰巧是^[[1;2A :终端模拟器将此代码发送到shell,它试图解释^[[1;2但不显示任何内容,因为它不知道那个逃脱序列。 但是A留下并显示出来。