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

Dan*_*Dan 21 command-line

我不知道为什么 Shift+Arrow Key结果中的一个ABCD字母。

为什么不是其他字母?为什么有任何字母?

Jen*_*son 27

终端仿真器,如gnome-terminal(“终端”在Ubuntu),而且xtermurxvt因为它们再现了旧的终端经电脑的唯一显示器的行为被命名为“模拟器”。此类终端通过基于文本的协议与计算机通信,最初设计为仅接收文本。很快,需要更多的控制:如何擦除一行?使用颜色?或者改变光标位置?

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

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

当终端收到时^[[A,它的意思不是“打印^[[A”,而是“用户按下了上箭头键”。这里的“A”完全是随意的:它恰好是每个人都同意的字母,因为这就是 DEC VT-52 及其后继流行的 VT-100 终端所使用的。

DEC VT-52 维护手册 1976

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

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

现在,Shift+的代码up恰好是^[[1;2A:终端仿真器将此代码发送到外壳程序,外壳程序尝试解释^[[1;2但不显示任何内容,因为它不知道该转义序列。但A被留下并显示。

  • 哇有趣。现在,当我在终端上运行进程时单击箭头键时,所有这些 `^[[A` 都有意义。 (5认同)
  • 您可以在按 SHIFT-UpArrow 之前按 CTRL-v 以“查看”原始格式的转义序列。除非您更改了默认值,否则 ESC 应在终端屏幕上显示为 ^[ (4认同)