ANSI 转义序列(ANSI Escape Sequences)
本文转载自 Github Gist from "fnky/ANSI.md"。
下面是笔者翻译版本。持续更新中。已经更完。“(?)”符号表示不确定如何翻译。
ANSI 转义序列
标准 Esc 代码以 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 快捷键 | 描述 |
|---|---|---|---|---|---|---|
BEL |
7 | 007 | 0x07 | \a |
^G |
终端响铃 |
BS |
8 | 010 | 0x08 | \b |
^H |
退格 |
HT |
9 | 011 | 0x09 | \t |
^I |
横向制表符(Tab) |
LF |
10 | 012 | 0x0A | \n |
^J |
换行 |
VT |
11 | 013 | 0x0B | \v |
^K |
纵向制表符(Tab) |
FF |
12 | 014 | 0x0C | \f |
^L |
换页 (即:New page NP) |
CR |
13 | 015 | 0x0D | \r |
^M |
回车 |
ESC |
27 | 033 | 0x1B | \e* |
^[ |
字符 Esc |
DEL |
127 | 177 | 0x7F | <none> |
<none> |
字符 Delete |
注意:有些控制转义序列,比如
\e表示ESC,并不能保证在所有语言和编译器中都能正常工作。建议使用十进制、八进制或十六进制表示作为转义码。
注意:Ctrl 快捷键 表示方式只是将形如 ASCII 码 \(1\) 等的不可打印字符与 ASCII 码 \(65\)(“A”)等的可打印字符关联起来。ASCII 码 \(1\) 是
^A(Ctrl-A),而 ASCII 码 \(7\)(BEL) 是^G(Ctrl-G)。这是一种常见的表示和输入方式。历史上,它们来自于 VT 系列终端之一。
光标控制
| 转义序列码 | 描述 |
|---|---|
ESC[H |
将光标移回 \((0,0)\) |
ESC[{line};{column}H 或 ESC[{line};{column}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 和 derived)同时支持 SCO 和 DEC 序列,但它们可能具有不同的功能。因此,建议使用 DEC 序列。
擦除功能
| 转义序列码 | 描述 |
|---|---|
ESC[J |
清屏(同 ESC\[0J)此处可能有误,应为 ESC\[2J |
ESC[0J |
从光标擦到屏尾 |
ESC[1J |
从光标擦到屏首 |
ESC[2J |
擦除整个屏幕 |
ESC[3J |
擦除保存的行(?) |
ESC[K |
整行擦除(同 ESC\[0K)此处可能有误,应为 ESC\[2K |
ESC[0K |
从光标擦到行尾 |
ESC[1K |
从光标擦到行首 |
ESC[2K |
擦除整个行 |
注意:擦除行不会移动光标,这意味着光标将停留在该行的原位。你可以在擦除行后使用
\r,将光标返回到当前行开始处。
颜色 / 图形模式
| 转义序列码 | 对应的重置序列 | 描述 |
|---|---|---|
ESC[1;34;{...}m |
设置单元格(?)的图形模式,用分号分隔 (;). |
|
ESC[0m |
重置(消除)所有颜色和图形 | |
ESC[1m |
ESC[22m |
粗体 |
ESC[2m |
ESC[22m |
虚化(暗淡) |
ESC[3m |
ESC[23m |
斜体 |
ESC[4m |
ESC[24m |
下划线 |
ESC[5m |
ESC[25m |
闪烁 |
ESC[7m |
ESC[27m |
反向 |
ESC[8m |
ESC[28m |
隐形 |
ESC[9m |
ESC[29m |
删除线 |
注意:一些终端可能不支持上述模式。
注意:虚化和粗体模式都用
ESC[22m序列重置。ESC[21m序列是双下划线模式下的非指定序列,仅在某些终端中工作,并用ESC[24m重置。
颜色码
大多数终端支持 8 色和 16 色,以及 256(8位)色。这些颜色由用户设置,但通常具有定义好的含义。
8-16 Colors
| 颜色名 | 前景色(字)码 | 背景色码 |
|---|---|---|
| 黑 | 30 |
40 |
| 红 | 31 |
41 |
| 绿 | 32 |
42 |
| 黄 | 33 |
43 |
| 蓝 | 34 |
44 |
| 品红 | 35 |
45 |
| 青 | 36 |
46 |
| 白 | 37 |
47 |
| 默认 | 39 |
49 |
| 重置 | 0 |
0 |
注意: 重置 色重置所有颜色、字体效果,默认 色只重置颜色。
大多数终端除了基本的 \(8\) 种颜色外,还支持“明亮”或“大胆”的颜色。它们有自己的一套代码,与正常的颜色镜像,但在代码中有一个额外的 ;1:
# 设置样式为粗体,红色字(前景色)。
\x1b[1;31mHello
# 设置样式为暗淡的白色字(前景色),红色背景。
\x1b[2;37;41mWorld
支持 aixterm 规范 的终端提供明亮版本的 ISO 颜色,不需要使用 bold 修饰符:
| 颜色名 | 前景(字)色码 | 背景色码 |
|---|---|---|
| 亮黑 | 90 |
100 |
| 亮红 | 91 |
101 |
| 亮绿 | 92 |
102 |
| 亮黄 | 93 |
103 |
| 亮蓝 | 94 |
104 |
| 亮品红 | 95 |
105 |
| 亮青 | 96 |
106 |
| 亮白 | 97 |
107 |
256 色
下面的转义码告诉终端使用给定的颜色 ID:
| 转义序列码 | 描述 |
|---|---|
ESC[38;5;{ID}m |
设置前景色 |
ESC[48;5;{ID}m |
设置背景色 |
其中的 {ID} 应该用下面颜色表中从 \(0\) 到 \(255\) 的颜色索引替换:

该表从最初的 \(16\) 种颜色(\(0\sim 15\))开始。
接下来的 \(216\) 种颜色 \((16-231)\) 可能由偏移 \(16\) 的 3bpc RGB 值组成,打包成一个值。(?)
最后的 \(24\) 种颜色是灰度色,从比黑色稍浅的颜色开始,一直到比白色稍深的颜色。
一些仿真器(?)将这些步骤解释为所有三个通道(RGB)上的线性增量(256/24),尽管一些仿真器可以明确定义这些值。
注:上图可以用以下 Python 2 代码生成
import sys
for i in range(0, 16):
for j in range(0, 16):
code = str(i * 16 + j)
sys.stdout.write(u"\u001b[38;5;" + code + "m " + code.ljust(4))
print u"\u001b[0m"
RGB 色
更多摩登的终端支持真彩色(\(24\) 位 RGB),它允许你用 RGB 设置(前景、背景)颜色。
这些转移序列通常不规范。
| 转义序列码 | 描述 |
|---|---|
ESC[38;2;{r};{g};{b}m |
用 RGB 设置前景色。 |
ESC[48;2;{r};{g};{b}m |
用 RGB 设置背景色。 |
注意:
;38和;48对应 \(16\) 种颜色序列,终端将其分别解释为设置前景色和背景色。其中,;2和;5设置颜色格式。
画面模式
设置模式
| 转义序列码 | 描述 |
|---|---|
ESC[={value}h |
将屏幕宽度或类型更改为由值指定的模式。 |
ESC[=0h |
\(40 \times 25\) 黑白(文本) |
ESC[=1h |
\(40 \times 25\) 彩色(文本) |
ESC[=2h |
\(80 \times 25\) 黑白(文本) |
ESC[=3h |
\(80 \times 25\) 彩色(文本) |
ESC[=4h |
\(320 \times 200\) 4 色(图形) |
ESC[=5h |
\(320 \times 200\) 黑白(图形) |
ESC[=6h |
\(640 \times 200\) 黑白(图形) |
ESC[=7h |
启用自动换行 |
ESC[=13h |
\(320 \times 200\) 彩色(图形) |
ESC[=14h |
\(640 \times 200\) 彩色(16 色图形) |
ESC[=15h |
\(640 \times 350\) 黑白(2 色图形) |
ESC[=16h |
\(640 \times 350\) 彩色(16 色图形) |
ESC[=17h |
\(640 \times 480\) 黑白(2 色图形) |
ESC[=18h |
\(640 \times 480\) 彩色(16 色图形) |
ESC[=19h |
\(320 \times 200\) 彩色(256 色图形) |
ESC[={value}l |
使用与设置模式相同的值重置模式,但 7 除外,它将禁用自动换行。该转义序列的最后一个字符是小写 \(\texttt{L}\)。 |
常见的专用模式
以下是一些专用模式的示例,这些模式没有在规范中定义,但在大多数终端中都能实现。
| 转义序列码 | 描述 |
|---|---|
ESC[?25l |
隐藏光标 |
ESC[?25h |
显示光标 |
ESC[?47l |
恢复屏幕 |
ESC[?47h |
保存屏幕 |
ESC[?1049h |
启用替代缓冲区 |
ESC[?1049l |
禁用替代缓冲区 |
有关 XTerm 定义的专用模式的更详细列表,请参阅 XTerm 控制序列。
注意: 虽然大多数终端都支持这些模式,但有些模式可能无法在 tmux 等多路复用器(?)中使用。
键盘字符串(?)
ESC[{code};{string};{...}p
将键盘按键重定义为指定字符串。
此转义序列的参数定义如下:
code是下表中列出的一个或多个值。这些值代表键盘按键和按键组合。在命令中使用这些值时,除了转义序列所需的分号外,还必须键入表中所示的分号。某些键盘无法使用括号中的代码。除非在ANSI.SYS的DEVICE命令中指定/X开关,否则ANSI.SYS不会为这些键盘解释括号中的代码。string既可以是单个字符的 ASCII 代码,也可以是包含在引号中的字符串。例如,65和"A"都可以用来表示大写 \(\texttt{A}\)。
重要:下表中的某些值并非对所有计算机都有效。请查阅计算机文档以了解不同的值。
键盘字符串表
| 键 | 码 | SHIFT+键 码 | CTRL+键 码 | ALT+键 码 |
|---|---|---|---|---|
| F1 | 0;59 | 0;84 | 0;94 | 0;104 |
| F2 | 0;60 | 0;85 | 0;95 | 0;105 |
| F3 | 0;61 | 0;86 | 0;96 | 0;106 |
| F4 | 0;62 | 0;87 | 0;97 | 0;107 |
| F5 | 0;63 | 0;88 | 0;98 | 0;108 |
| F6 | 0;64 | 0;89 | 0;99 | 0;109 |
| F7 | 0;65 | 0;90 | 0;100 | 0;110 |
| F8 | 0;66 | 0;91 | 0;101 | 0;111 |
| F9 | 0;67 | 0;92 | 0;102 | 0;112 |
| F10 | 0;68 | 0;93 | 0;103 | 0;113 |
| F11 | 0;133 | 0;135 | 0;137 | 0;139 |
| F12 | 0;134 | 0;136 | 0;138 | 0;140 |
| HOME(数字键盘) | 0;71 | 55 | 0;119 | -- |
| UP ARROW(数字键盘) | 0;72 | 56 | (0;141) | -- |
| PAGE UP(数字键盘) | 0;73 | 57 | 0;132 | -- |
| LEFT ARROW(数字键盘) | 0;75 | 52 | 0;115 | -- |
| RIGHT ARROW(数字键盘) | 0;77 | 54 | 0;116 | -- |
| END(数字键盘) | 0;79 | 49 | 0;117 | -- |
| DOWN ARROW(数字键盘) | 0;80 | 50 | (0;145) | -- |
| PAGE DOWN(数字键盘) | 0;81 | 51 | 0;118 | -- |
| INSERT(数字键盘) | 0;82 | 48 | (0;146) | -- |
| DELETE(数字键盘) | 0;83 | 46 | (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 | -- |
| BACKSPACE | 8 | 8 | 127 | (0) |
| ENTER | 13 | -- | 10 | (0 |
| TAB | 9 | 0;15 | (0;148) | (0;165) |
| NULL | 0;3 | -- | -- | -- |
| A | 97 | 65 | 1 | 0;30 |
| B | 98 | 66 | 2 | 0;48 |
| C | 99 | 66 | 3 | 0;46 |
| D | 100 | 68 | 4 | 0;32 |
| E | 101 | 69 | 5 | 0;18 |
| F | 102 | 70 | 6 | 0;33 |
| G | 103 | 71 | 7 | 0;34 |
| H | 104 | 72 | 8 | 0;35 |
| I | 105 | 73 | 9 | 0;23 |
| J | 106 | 74 | 10 | 0;36 |
| K | 107 | 75 | 11 | 0;37 |
| L | 108 | 76 | 12 | 0;38 |
| M | 109 | 77 | 13 | 0;50 |
| N | 110 | 78 | 14 | 0;49 |
| O | 111 | 79 | 15 | 0;24 |
| P | 112 | 80 | 16 | 0;25 |
| Q | 113 | 81 | 17 | 0;16 |
| R | 114 | 82 | 18 | 0;19 |
| S | 115 | 83 | 19 | 0;31 |
| T | 116 | 84 | 20 | 0;20 |
| U | 117 | 85 | 21 | 0;22 |
| V | 118 | 86 | 22 | 0;47 |
| W | 119 | 87 | 23 | 0;17 |
| X | 120 | 88 | 24 | 0;45 |
| Y | 121 | 89 | 25 | 0;21 |
| Z | 122 | 90 | 26 | 0;44 |
| 1 | 49 | 33 | -- | 0;120 |
| 2 | 50 | 64 | 0 | 0;121 |
| 3 | 51 | 35 | -- | 0;122 |
| 4 | 52 | 36 | -- | 0;123 |
| 5 | 53 | 37 | -- | 0;124 |
| 6 | 54 | 94 | 30 | 0;125 |
| 7 | 55 | 38 | -- | 0;126 |
| 8 | 56 | 42 | -- | 0;126 |
| 9 | 57 | 40 | -- | 0;127 |
| 0 | 48 | 41 | -- | 0;129 |
| - | 45 | 95 | 31 | 0;130 |
| = | 61 | 43 | -- | 0;131 |
| [ | 91 | 123 | 27 | 0;26 |
| ] | 93 | 125 | 29 | 0;27 |
| 92 | 124 | 28 | 0;43 | |
| ; | 59 | 58 | -- | 0;39 |
| ' | 39 | 34 | -- | 0;40 |
| , | 44 | 60 | -- | 0;51 |
| . | 46 | 62 | -- | 0;52 |
| / | 47 | 63 | -- | 0;53 |
| ` | 96 | 126 | -- | (0;41) |
| ENTER(主键盘) | 13 | -- | 10 | (0;166) |
| /(主键盘) | 47 | 47 | (0;142) | (0;74) |
| *(主键盘) | 42 | (0;144) | (0;78) | -- |
| -(主键盘) | 45 | 45 | (0;149) | (0;164) |
| +(主键盘) | 43 | 43 | (0;150) | (0;55) |
| 5(主键盘) | (0;76) | 53 | (0;143) | -- |

浙公网安备 33010602011771号