终端字体,颜色,背景,光标,屏幕等样式 ANSI Esc \033, \x1B, \e 转义序列用法
简介
ANSI 转义序列Esc(\033, \x1B, \e)是个特殊转义字符,它可以在终端控制光标,改变字体颜色和背景,设置屏幕或者使用私有模式来改变终端样式,使终端样式更美观,功能更多
通用 ASCII 码
名称 | 描述 | C语言 | Ctrl | 10进制 | 8进制 | 16进制 |
---|---|---|---|---|---|---|
BEL | 响铃 | \a | ^G | 7 | 07 | 0x07 |
BS | 退格 | \b | ^H | 8 | 010 | 0x08 |
HT | 水平制表符 | \t | ^I | 9 | 011 | 0x09 |
LF | 换行 | \n | ^N | 10 | 012 | 0x0A |
VT | 垂直制表符 | \v | ^J | 11 | 013 | 0x0B |
FF | 换页(又作:新页面 NP ) | \f | ^K | 12 | 014 | 0x0C |
CR | 回车 | \r | ^M | 13 | 015 | 0x0D |
\e | Esc序列 | \e | ^[ | 27 | 033 | 0x1B |
DEL | 删除 | none | none | 127 | 0177 | 0x7F |
示例代码(linux shell):
echo -en "\e[31mred\e[32mgreen\e[34mblue"
运行结果:
光标
序列 | 描述 |
---|---|
\e[H | 将光标移动到起始位置 (0, 0) |
\e[{line};{column}H \e[{line};{column}f | 将光标移动到第 # 行,第 # 列 |
\e[#A | 将光标向上移动 # 行 |
\e[#B | 将光标向下移动 # 行 |
\e[#C | 向右移动光标#列 |
\e[#D | 向左移动光标#列 |
\e[#E | 将光标移动到下一行的开头,向下 # 行 |
\e[#F | 将光标移动到上一行的开头,#行向上 |
\e[#G | 将光标移动到列# |
\e[6n | 请求光标位置(报告为 \e[#;#R ) |
\e M | 将光标向上移动一行,如果需要滚动 |
\e 7 | 保存光标位置 (DEC) |
\e 8 | 将光标恢复到上次保存的位置 (DEC) |
\e[s | 保存光标位置 (SCO) |
\e[u | 将光标恢复到上次保存的位置 (SCO) |
擦除
序列 | 描述 |
---|---|
\e[J | 在显示中擦除(与 \e[0J 相同) |
\e[0J | 从光标擦除直到屏幕结束 |
\e[1J | 从光标擦除到屏幕开头 |
\e[2J | 擦除整个屏幕 |
\e[3J | 删除保存的行 |
\e[K | 行内擦除(同 \e[0K) |
\e[0K | 从光标擦除到行尾 |
\e[1K | 擦除光标所在行的开头 |
\e[2K | 擦除整行 |
样式
序列 | 重置序列 | 描述 |
---|---|---|
\e[1;34;{…}m | 设置单元格的图形模式,以分号 ( ; ) 分隔 | |
\e[0m | 重置所有模式(样式和颜色) | |
\e[1m | \e[22m | 设置粗体模式 |
\e[2m | \e[22m | 设置昏暗/昏暗模式 |
\e[3m | \e[23m | 设置斜体模式 |
\e[4m | \e[24m | 设置下划线模式 |
\e[5m | \e[25m | 设置闪烁模式 |
\e[7m | \e[27m | 设置反向/反向模式 |
\e[8m | \e[28m | 设置隐藏/不可见模式 |
\e[9m | \e[29m | 设置删除线模式 |
颜色
颜色 | 前景 | 背景 |
---|---|---|
黑 | \e[30m | \e[40m |
红 | \e[31m | \e[41m |
绿 | \e[32m | \e[42m |
黄 | \e[33m | \e[43m |
蓝 | \e[34m | \e[44m |
粉 | \e[35m | \e[45m |
青 | \e[36m | \e[46m |
白 | \e[37m | \e[47m |
256色/RGB 色 | \e[38m | \e[48m |
默认 | \e[39m | \e[49m |
重置 | \e[0m | \e[0m |
大多数终端,除了基本的 8 种颜色外,还支持"明亮"或"粗体"颜色
支持 aixterm 规范 的终端提供了 ISO 颜色的明亮版本,无需使用粗体修饰符
颜色 | 前景 | 背景 |
---|---|---|
亮黑 | \e[90m | \e[100m |
亮红 | \e[91m | \e[101m |
亮绿 | \e[92m | \e[102m |
亮黄 | \e[93m | \e[103m |
亮蓝 | \e[94m | \e[104m |
亮粉 | \e[95m | \e[105m |
亮青 | \e[96m | \e[106m |
亮白 | \e[97m | \e[107m |
256 色
序列 | 描述 |
---|---|
\e[38;5;{ID}m | 设置前景色 |
\e[48;5;{ID}m | 设置背景颜色 |
根据颜色索引图替换{ID}值:
RGB 色
序列 | 描述 |
---|---|
\e[38;2;{r};{g};{b}m | 将前景色设置为 RGB |
\e[48;2;{r};{g};{b}m | 将背景颜色设置为 RGB |
屏幕模式
设置模式
序列 | 描述 |
---|---|
\e[={value}h | 将屏幕宽度或类型更改为 value 指定的模式 |
\e[=0h | 40 x 25 单色(文本) |
\e[=1h | 40 x 25 彩色(文字) |
\e[=2h | 80 x 25 单色(文本) |
\e[=3h | 80 x 25 彩色(文字) |
\e[=4h | 320 x 200 4 色(图形) |
\e[=5h | 320 x 200 单色(图形) |
\e[=6h | 640 x 200 单色(图形) |
\e[=7h | 启用换行 |
\e[=13h | 320 x 200 彩色(图形) |
\e[=14h | 640 x 200 色(16 色图形) |
\e[=15h | 640 x 350 单色(2 色图形) |
\e[=16h | 640 x 350 色(16 色图形) |
\e[=17h | 640 x 480 单色(2 色图形) |
\e[=18h | 640 x 480 色(16 色图形) |
\e[=19h | 320 x 200 色(256 色图形) |
\e[={value}l | 使用与设置模式相同的值重置模式,但 7 除外,它禁用换行 此转义序列中的最后一个字符是小写 L |
常见的私有模式
这些是私有模式的一些示例,规范中没有定义,但在大多数终端中都实现了
序列 | 描述 |
---|---|
\e[?25l | 使光标不可见 |
\e[?25h | 使光标可见 |
\e[?47l | 恢复屏幕 |
\e[?47h | 保存画面 |
\e[?1049h | 启用备用缓冲区 |
\e[?1049l | 禁用备用缓冲区 |
有关 XTerm定义的私有模式的更深入列表, 请参阅 XTerm 控制序列