GNU Screen 中的终端转义序列

GNU Screen 中的终端转义序列

因此,我对终端(或更准确地说是终端仿真器)中的转义序列的概念以及它们与屏幕bindkey命令的关系感到很困惑。我查看了.screenrc在互联网上找到的一些示例文件,在其中看到了以下配置:

# switch windows with F3 (prev) and F4 (next)
bindkey "^[OR" prev
bindkey "^[OS" next

# switch layouts with Ctrl+F3 (prev layout) and Ctrl+F4 (next)
bindkey "^[O1;5R" layout prev
bindkey "^[O1;5S" layout next

我不知道为什么,例如,序列^[0R意味着F3和序列^[01;5R意味着Ctrl+F3。是否有此类序列的表格?

这些序列还让我想起了用于配置终端提示中的颜色的序列(例如使用$PS1env 变量),例如\[\033[0m\]重置和\[\033[30m\]前景黑色。这两个“代码序列”之间真的有关系吗?还是只是我的想象?

答案1

好问题。

是的,这些是 ANSI 转义代码。

您可以在此处查看 VT100 的 ANSI 转义代码列表: http://www.braun-home.net/michael/info/misc/VT100_commands.htm但还有一种更快捷的方法 - 在你的终端仿真器中按下 Control-v然后 Control-F3例如你会看到这个:

$ ^[[1;5R

其中man bash写道:

   quoted-insert (C-q, C-v)
          Add the next character typed to the line verbatim.  This
          is how to insert characters like C-q, for example.

请注意,它^[本身就Escape在输出中 quoted-insert,你可以研究这个答案 https://unix.stackexchange.com/a/108014/72304了解这个符号的来源。

为了更好地理解它——正如你已经知道的,有一些用于选择颜色的 ANSI 转义代码使用 Escape键。有几种方法可以输入文字 Escape- 例如,我们可以使用八进制表示法,因为我们知道 EscapeASCII 表中的 \033 是:

printf "\033[1;34mThis is a blue text.\n\033[0m"

我们还可以使用\e一些实现可以 printf理解的反斜杠转义:

printf "\e[1;34mThis is a blue text.\n\e[0m"

但您也可以使用quoted-insert插入文字Escape- 将光标指向 的位置\e,将其移除,按 Control-v然后按 Escape。您将得到以下内容:

printf "^[[1;34mThis is a blue text.\n^[[0m"

请注意,当您在终端仿真器中执行此操作时,^[它将被视为单个字符。但是,复制上述行并粘贴到终端仿真器中将不起作用,因为您将得到两个单独的字符,而不是一个。

相关内容