ANSI 转义序列

2025-05-16T12:54:00

下面文章内容转自 fnky 将英文内容翻译成中文
以下内容为中文翻译内容

ANSI 转义序列

标准的转义码以前缀 Escape 开头:

  • Ctrl-键:^[
  • 八进制:\033
  • Unicode:\u001b
  • 十六进制:\x1B
  • 十进制:27

其后跟随命令,有时用左方括号 ([) 分隔,称为控制序列引导符 (CSI),可选地后跟参数和命令本身。

参数用分号 (;) 分隔。

例如:

\x1b[1;31m  # 设置样式为粗体,红色前景。

序列

  • ESC - 以 ESC (\x1B) 开头的序列
  • CSI - 控制序列引导符:以 ESC [ 或 CSI (\x9B) 开头的序列
  • DCS - 设备控制字符串:以 ESC P 或 DCS (\x90) 开头的序列
  • OSC - 操作系统命令:以 ESC ] 或 OSC (\x9D) 开头的序列

序列和参数之间的任何空格都应被忽略。它们的存在是为了提高可读性。

通用 ASCII 码

名称十进制八进制十六进制C-转义Ctrl-键描述
BEL70070x07\a^G终端铃声
BS80100x08\b^H退格
HT90110x09\t^I水平制表符
LF100120x0A\n^J换行 (新行)
VT110130x0B\v^K垂直制表符
FF120140x0C\f^L换页 (也称:新页 NP)
CR130150x0D\r^M回车
ESC270330x1B\e*^[转义字符
DEL1271770x7F<none><none>删除字符

注意: 一些控制转义序列,例如 \e 代表 ESC,并不能保证在所有语言和编译器中都有效。建议使用十进制、八进制或十六进制表示作为转义码。

注意: Ctrl-键 表示法只是将 ASCII 码 1 开始的不可打印字符与 ASCII 码 65 ("A") 开始的可打印(字母)字符相关联。ASCII 码 1 将是 ^A (Ctrl-A),而 ASCII 码 7 (BEL) 将是 ^G (Ctrl-G)。这是一种常见的表示法(和输入方法),历史上源于 VT 系列终端之一。

光标控制

ESC 码序列描述
ESC[H将光标移动到起始位置 (0, 0)
ESC[{行};{列}H
ESC[{行};{列}f
将光标移动到指定行号、列号
ESC[#A将光标向上移动 # 行
ESC[#B将光标向下移动 # 行
ESC[#C将光标向右移动 # 列
ESC[#D将光标向左移动 # 列
ESC[#E将光标移动到下一行的开头,向下 # 行
ESC[#F将光标移动到上一行的开头,向上 # 行
ESC[#G将光标移动到指定列 #
ESC[6n请求光标位置 (报告为 ESC[#;#R)
ESC M将光标向上移动一行,如果需要则滚动
ESC 7保存光标位置 (DEC)
ESC 8将光标恢复到上次保存的位置 (DEC)
ESC[s保存光标位置 (SCO)
ESC[u将光标恢复到上次保存的位置 (SCO)

注意: 一些序列,例如保存和恢复光标,是私有序列,并未标准化。虽然一些终端模拟器(例如 xterm 及其衍生版本)同时支持 SCO 和 DEC 序列,但它们的功能可能不同。因此,建议使用 DEC 序列。

清除功能

ESC 码序列描述
ESC[J清除显示内容 (等同于 ESC[0J)
ESC[0J从光标位置清除到屏幕末尾
ESC[1J从光标位置清除到屏幕开头
ESC[2J清除整个屏幕
ESC[3J清除已保存的行
ESC[K清除行内内容 (等同于 ESC[0K)
ESC[0K从光标位置清除到行尾
ESC[1K从行首清除到光标位置
ESC[2K清除整行

注意:清除行不会移动光标,这意味着光标将停留在清除行之前的最后位置。你可以在清除行后使用 \r 将光标返回到当前行的开头。

颜色 / 图形模式

ESC 码序列重置序列描述
ESC[1;34;{...}m 设置单元格的图形模式,用分号 (;) 分隔。
ESC[0m 重置所有模式 (样式和颜色)
ESC[1mESC[22m设置粗体模式。
ESC[2mESC[22m设置暗淡/浅色模式。
ESC[3mESC[23m设置斜体模式。
ESC[4mESC[24m设置下划线模式。
ESC[5mESC[25m设置闪烁模式
ESC[7mESC[27m设置反相/反转模式
ESC[8mESC[28m设置隐藏/不可见模式
ESC[9mESC[29m设置删除线模式。

注意: 某些终端可能不支持上面列出的某些图形模式序列。

注意: 暗淡和粗体模式都使用 ESC[22m 序列重置。ESC[21m 序列是双下划线模式的非指定序列,仅在某些终端中有效,并使用 ESC[24m 重置。

颜色代码

大多数终端支持 8 色和 16 色,以及 256 色 (8 位)。这些颜色由用户设置,但具有通常定义的含义。

8-16 色

颜色名称前景色代码背景色代码
黑色3040
红色3141
绿色3242
黄色3343
蓝色3444
洋红色3545
青色3646
白色3747
默认3949

除了基本的 8 种颜色外,大多数终端还支持“亮色”或“粗体”颜色。它们有自己的一组代码,与普通颜色类似,但在其代码中附加了一个 ;1

# 设置样式为粗体,红色前景。
\x1b[1;31mHello
# 设置样式为暗淡的白色前景和红色背景。
\x1b[2;37;41mWorld

支持 aixterm 规范 的终端提供 ISO 颜色的亮色版本,无需使用粗体修饰符:

颜色名称前景色代码背景色代码
亮黑色90100
亮红色91101
亮绿色92102
亮黄色93103
亮蓝色94104
亮洋红色95105
亮青色96106
亮白色97107

256 色

以下转义码告诉终端使用给定的颜色 ID:

ESC 码序列描述
ESC[38;5;{ID}m设置前景色。
ESC[48;5;{ID}m设置背景色。

其中 {ID} 应替换为以下颜色表中 0 到 255 的颜色索引:

  • 0-7: 标准颜色 (如 ESC [ 30–37 m)
  • 8–15: 高强度颜色 (如 ESC [ 90–97 m)
  • 16-231: 6 × 6 × 6 立方体 (216 种颜色): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)

一些模拟器将这些步骤解释为所有三个通道上的线性增量 (256 / 24),而其他模拟器可能明确定义这些值。

  • 232-255: 从暗到亮的 24 级灰度。

RGB 颜色

更现代的终端支持 真彩色 (24 位 RGB),允许您使用 RGB 设置前景和背景颜色。

这些转义序列通常没有详细的文档记录。

ESC 码序列描述
ESC[38;2;{r};{g};{b}m将前景色设置为 RGB。
ESC[48;2;{r};{g};{b}m将背景色设置为 RGB。

注意,;38;48 对应于 16 色序列,并由终端解释为分别设置前景和背景颜色。而 ;2;5 设置颜色格式。

屏幕模式

设置模式

ESC 码序列描述
ESC[={值}h将屏幕宽度或类型更改为值指定的模式。
ESC[=0h40 x 25 单色 (文本)
ESC[=1h40 x 25 彩色 (文本)
ESC[=2h80 x 25 单色 (文本)
ESC[=3h80 x 25 彩色 (文本)
ESC[=4h320 x 200 4色 (图形)
ESC[=5h320 x 200 单色 (图形)
ESC[=6h640 x 200 单色 (图形)
ESC[=7h启用换行
ESC[=13h320 x 200 彩色 (图形)
ESC[=14h640 x 200 彩色 (16色图形)
ESC[=15h640 x 350 单色 (2色图形)
ESC[=16h640 x 350 彩色 (16色图形)
ESC[=17h640 x 480 单色 (2色图形)
ESC[=18h640 x 480 彩色 (16色图形)
ESC[=19h320 x 200 彩色 (256色图形)
ESC[={值}l使用与设置模式相同的值重置模式,但 7 除外,它禁用换行。此转义序列中的最后一个字符是小写 L。

常见的私有模式

这些是一些私有模式的示例,它们没有被规范定义,但在大多数终端中都已实现。

ESC 码序列描述
ESC[?25l使光标不可见
ESC[?25h使光标可见
ESC[?47l恢复屏幕
ESC[?47h保存屏幕
ESC[?1049h启用备用缓冲区
ESC[?1049l禁用备用缓冲区

有关 XTerm 定义的更深入的私有模式列表,请参阅 XTerm 控制序列

注意:虽然这些模式可能受大多数终端支持,但有些可能无法在 tmux 等多路复用器中工作。

键盘字符串

ESC[{代码};{字符串};{...}p

将键盘按键重新定义为指定的字符串。

此转义序列的参数定义如下:

  • 代码 是下表中列出的一个或多个值。这些值表示键盘按键和组合键。在命令中使用这些值时,除了转义序列所需的分号外,还必须键入此表中显示的分号。括号中的代码在某些键盘上不可用。除非您在 ANSI.SYSDEVICE 命令中指定 /X 开关,否则 ANSI.SYS 不会解释这些键盘的括号中的代码。
  • 字符串 是单个字符的 ASCII 码或包含在引号中的字符串。例如,65 和 "A" 都可以用来表示大写 A。

重要提示: 下表中的某些值并非对所有计算机都有效。请查阅您计算机的文档以获取不同的值。

键盘字符串列表

按键代码SHIFT+代码CTRL+代码ALT+代码
F10;590;840;940;104
F20;600;850;950;105
F30;610;860;960;106
F40;620;870;970;107
F50;630;880;980;108
F60;640;890;990;109
F70;650;900;1000;110
F80;660;910;1010;111
F90;670;920;1020;112
F100;680;930;1030;113
F110;1330;1350;1370;139
F120;1340;1360;1380;140
HOME (数字键盘)0;71550;119--
UP ARROW (数字键盘)0;7256(0;141)--
PAGE UP (数字键盘)0;73570;132--
LEFT ARROW (数字键盘)0;75520;115--
RIGHT ARROW (数字键盘)0;77540;116--
END (数字键盘)0;79490;117--
DOWN ARROW (数字键盘)0;8050(0;145)--
PAGE DOWN (数字键盘)0;81510;118--
INSERT (数字键盘)0;8248(0;146)--
DELETE (数字键盘)0;8346(0;147)--
HOME(224;71)(224;71)(224;119)(224;151)
UP ARROW(224;72)(224;72)(224;141)(224;152)
PAGE UP(224;73)(224;73)(224;132)(224;153)
LEFT ARROW(224;75)(224;75)(224;115)(224;155)
RIGHT ARROW(224;77)(224;77)(224;116)(224;157)
END(224;79)(224;79)(224;117)(224;159)
DOWN ARROW(224;80)(224;80)(224;145)(224;154)
PAGE DOWN(224;81)(224;81)(224;118)(224;161)
INSERT(224;82)(224;82)(224;146)(224;162)
DELETE(224;83)(224;83)(224;147)(224;163)
PRINT SCREEN----0;114--
PAUSE/BREAK----0;0--
BACKSPACE88127(0)
ENTER13--10(0
TAB90;15(0;148)(0;165)
NULL0;3------
A976510;30
B986620;48
C996630;46
D1006840;32
E1016950;18
F1027060;33
G1037170;34
H1047280;35
I1057390;23
J10674100;36
K10775110;37
L10876120;38
M10977130;50
N11078140;49
O11179150;24
P11280160;25
Q11381170;16
R11482180;19
S11583190;31
T11684200;20
U11785210;22
V11886220;47
W11987230;17
X12088240;45
Y12189250;21
Z12290260;44
14933--0;120
2506400;121
35135--0;122
45236--0;123
55337--0;124
65494300;125
75538--0;126
85642--0;126
95740--0;127
04841--0;129
-4595310;130
=6143---0;131
[91123270;26
]93125290;27
92124280;43
;5958--0;39
'3934--0;40
,4460--0;51
.4662--0;52
/4763--0;53
`96126--(0;41)
ENTER (小键盘)13--10(0;166)
/ (小键盘)4747(0;142)(0;74)
* (小键盘)42(0;144)(0;78)--
- (小键盘)4545(0;149)(0;164)
+ (小键盘)4343(0;150)(0;55)
5 (小键盘)(0;76)53(0;143)--

资源

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »