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號