因此,我对终端(或更准确地说是终端仿真器)中的转义序列的概念以及它们与屏幕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
。是否有此类序列的表格?
这些序列还让我想起了用于配置终端提示中的颜色的序列(例如使用$PS1
env 变量),例如\[\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
- 例如,我们可以使用八进制表示法,因为我们知道
Escape
ASCII 表中的 \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"
请注意,当您在终端仿真器中执行此操作时,^[
它将被视为单个字符。但是,复制上述行并粘贴到终端仿真器中将不起作用,因为您将得到两个单独的字符,而不是一个。