跳转至

ANSI 转义序列

基本格式

\033[<参数1;参数2...><命令类型>
  • \033\x1B:表示“ESC”字符(ASCII 27)。
  • [:固定格式。
  • <参数列表>:一个或多个以分号分隔的数值,作为命令的参数。
  • <命令类型>:一个分大小写的字母,告诉终端这是什么类型的命令。
格式(默认跟随\033[) 说明(参数)
<n>A 光标上移 n 行(n 默认 1)
<n>B 光标下移 n 行(n 默认 1)
<n>C 光标右移 n 列(n 默认 1)
<n>D 光标左移 n 列(n 默认 1)
<n>E 光标移动到下 n 行的行首(n 默认 1)
<n>F 光标移动到上 n 行的行首(n 默认 1)
<n>G 光标移至本行第 n 列(n 从 1 起)
<r>;<c>Hf 光标移至第 r 行、第 c 列
<n>J 清屏:0 光标至屏幕末;1 屏幕开头至光标;2 整屏清除
<n>K 清行:0 光标至行尾;1 行首至光标;2 整行清除
<n>L 在当前行上方插入 n 行空白行(n 默认 1)
<n>M 删除当前行并上移下方 n 行(n 默认 1)
<n>P 删除当前行光标处 n 个字符(n 默认 1)
<n>S 整屏上滚 n 行(n 默认 1)
<n>T 整屏下滚 n 行(n 默认 1)
<n>X 在光标处清除 n 个字符(n 默认 1)
<n>Z 光标左移到上一个制表位,重复 n 次(n 默认 1)
?25h / ?25l 设置/重置模式:25 显示/隐藏光标
s 保存当前光标位置
u 恢复到最近一次 s 保存的位置
<n>m 设置文本属性:颜色(30–37, 40–47 等)、粗体(1)、下划线(4) 等
6n 查询光标位置,终端返回 ESC[row;colR
\033[c 查询终端属性
<top>;<bot>r 设置屏幕滚动区域,从第 top 行到第 bot 行
\033c 完全重置终端(RIS)

接下来按命令作用分类。

m - 控制显示样式

重置所有显示样式用 \033[0m

1. 常用 SGR 参数

参数 含义 参数 含义
0 复位(所有属性) 21 强制关闭粗体
1 粗体(Bright) 22 正常强度
2 暗淡/灰色(Dim) 23 关闭斜体/暗淡
3 斜体(Italic) 24 关闭下划线
4 下划线(Underline) 25 关闭闪烁
5 闪烁(Slow Blink) 26 关闭快速闪烁
7 反显(Inverse) 27 关闭反显
8 隐藏(Hidden) 28 取消隐藏
9 删除线(Strike) 29 关闭删除线
# 粗体红色文本
echo -e "\033[1;31m测试\033[0m"

2. 标准 8 色与 16 色

  • 前景色:30–37、90-97
  • 背景色:40–47、100-107
30/40 系列色 90/100 系列 - 亮色
0 90 亮黑(灰)
1 91 亮红
2 绿 92 亮绿
3 93 亮黄
4 94 亮蓝
5 品红 95 亮品红
6 96 亮青
7 97 亮白
1
2
3
4
5
# 黄底黑字
echo -e "\033[30;43mBlack on yellow background\033[0m"

# 亮蓝前景,亮白背景
echo -e "\033[94;107mBright blue on bright white\033[0m"

3. 扩展色(256 色和真彩色)

256 色模式

格式 - 前景: 38;5;<n> - 背景: 48;5;<n>

  • <n> 范围 0–255
    • 0–15:标准及亮色
    • 16–231:6×6×6 色块
    • 232–255:灰度级
# 使用 256 色模式(例如 n=202 桃色)
echo -e "\033[38;5;202mSome Peach Text\033[0m"

真彩色(24-bit RGB)

  • 格式

    • 前景: 38;2;<r>;<g>;<b>
    • 背景: 48;2;<r>;<g>;<b>
  • <r>,<g>,<b> 范围 0–255

# 真彩色示例:紫红
echo -e "\033[38;2;128;0;128mPurple Text\033[0m"

综合示例

# 混合:粗体、下划线、24 位真彩色前景和 256 色背景
echo -e "\033[1;4;38;2;0;200;0;48;5;236m测试文字\033[0m"

光标控制

结尾 功能 说明 示例
A CUU(Cursor Up) 光标上移 n 行(默认 1) \033[5A 上移 5 行
B CUD(Cursor Down) 光标下移 n 行(默认 1) \033[3B 下移 3 行
C CUF(Cursor Forward) 光标右移 n 列(默认 1) \033[10C 右移 10 列
D CUB(Cursor Backward) 光标左移 n 列(默认 1) \033[2D 左移 2 列
H CUP(Cursor Position) 将光标移动到行 r、列 c;同 \033[r;cH\033[r;cF \033[12;40H 移动到12行40列
f HVP(Horizontal & Vertical Position)同 H \033[1;1f 回到左上角

清屏与清行

结尾 功能 参数 示例
J ED(Erase in Display) 0:光标到屏幕末尾1:屏幕开头到光标2:整屏清除 \033[2J 清除全屏
K EL(Erase in Line) 0:光标到行尾1:行首到光标2:整行清除 \033[0K 清除光标到行尾

注意

清除指令并不改变光标的位置,清理完一般要 \r\033[1G 回到到本行行首(第1列)。

可以这样清屏

以Python为例,代替 os.system('cls'),不闪屏。

print('\033[1J', '\033[1;1H', sep='', end='') 

状态保存与恢复

结尾 功能 说明 示例
s SCP(Save Cursor Position) 保存当前光标位置 \033[s
u RCP(Restore Cursor Position) 恢复到最近一次 s 保存的位置 \033[u
7 DECSC(Save DEC Private) 保存光标与属性到 DEC 的私有缓冲区 \0337
8 DECRC(Restore DEC Private) 从 DEC 私有缓冲区恢复光标与属性 \0338

滚动与分页

结尾 功能 说明 示例
S SU(Scroll Up) 整屏上滚 n 行(默认 1) \033[4S 上滚 4 行
T SD(Scroll Down) 整屏下滚 n 行(默认 1) \033[2T 下滚 2 行
g TBC(Tabulation Clear) 0:清除当前 Tab 停靠点3:清除所有 \033[3g 清除所有 Tab 点

模式设置(DEC Private Modes)

这些序列也以 h(Set Mode)和 l(Reset Mode)结尾,通过在 [ 与数字之间加 ? 来区分私有模式。

结尾 功能 常见私有模式 ?25(光标可见)?1049(切换备用缓冲区) 示例
h SM(Set Mode) \033[?25h:显示光标 \033[?1049h:进入备用缓冲区
l RM(Reset Mode) \033[?25l:隐藏光标 \033[?1049l:退出备用缓冲区

报告与查询

结尾 功能 说明 示例
n DSR(Device Status Report) 参数 5:报告终端就绪状态6:报告光标位置 \033[6n 终端返回 \033[row;colR
c DA(Device Attributes) 查询终端类型 \033[c

其他常用序列

  • OSC(Operating System Commands),以 ESC ] 开头,结尾用 BEL 或 \033\\。常用于设置窗口标题:

    # 将终端窗口标题设为 “MyApp”
    echo -e "\033]0;MyApp\007"
    

  • RIS(Reset to Initial State)\033c,完整重置终端到出厂状态。

  • 软字符集切换ESC ( … / ESC ) …,切换 G0/G1 字符集。