跳到主要内容

ANSI 转义码

· 阅读需 10 分钟

类别

转义码主要用于控制终端的输出行为,有四个基本类别:

  • 光标:允许操控屏幕上光标的:移动、显隐、滚动限制、部分屏幕的使用
  • 属性:设置或清除文本的属性
  • 颜色:更改当前文本的前景色和背景色
  • 其他转义:清除屏幕、清除屏幕部分、重置终端、设置制表符

一些 ANSI 转义序列

序列名称作用
\eNSS2 - Single Shift Two从其中一个代替的字符集选择一个字集
\eOSS3 - Single Shift Three同上
\ePDCS - 设备控制字符串控制设备。在 xterm 中,该序列的使用包括定义用户的自定义密钥,以及请求或设置 Termcap/Terminfo 数据
\e[CSI - 控制序列导入器大部分有用的序列,参阅下面的光标、颜色、滚动
\e\ST - 结束字符串终止其他控件(包括 APC、DCS、OSC、PM 和 SOS )中的字符串
\e]OSC - 操作系统命令启动操作系统使用的控制字符串。 OSC 和 CSI 序列相似,但不限于整数参数
\eXSOS - 字符串开始
\e^PM - 私有消息
\e_APC - 应用程序命令
\ecRIS - 重置为初始状态将设备重置为原始状态。可能包括(如果适用的话):重置图形格式,清除制表符,重置为默认字体等等。

光标和滚动转义序列

光标显隐

在 shell 脚本使用 tput xx 转义序列描述
tivis (注意 ⚠️ : Terminal 的条目不支持)\e[?25l隐藏光标
tvvis (注意 ⚠️ : Terminal 的条目不支持)\e[?25h显示光标

光标位置设置

在 shell 脚本使用 tput xx 转义序列描述
cup r c\e[r;c;H光标设置到 r 行 c 列
--\e[6n报告光标位置(shell 脚本不支持)
sc\e7\e[s保存当前光标的位置 (wiki 百科说 \e[s 也可以,在我的 mac 不可用)
rc\e8\e[u恢复当前光标的位置 (wiki 百科说 \e[u 也可以,在我的 mac 不可用)
cuu r\e[rA光标向上 r 行
cud r\e[rB光标向下 r 行
cuf c\e[cC光标向右 c 列
cub c\e[cD光标向左 c 列
cnl c\e[cE光标向下 c 列(默认 1)的开头
cha c\e[cF光标向上 c 列(默认 1)的开头
el n\e[nS整页向上滚动,新行添加到底部
su n\e[nT整页向下滚动,新行添加到顶部
hvp r c\e[r;cF光标位置设定,同 cup
--\e[?7l当光标达到屏幕的右边缘时禁用自动换行
--\e[?7h启用换行
do\eD将光标向下移动一行
up\eM将光标向上移动一行
````

屏幕滚动行为

在 shell 脚本使用 tput xx 转义序列描述
--\e[r启用全屏滚动
--\e[S;Er启用从 S 行到 E 行的屏幕部分滚动,并将光标移动到此区域的顶部

属性和颜色转义序列

重置属性

shell 脚本使用 tput xx转义序列描述
me\e[m\e[0m将所有属性重置为默认值

属性设置

shell 脚本使用 tput xx转义序列描述
bold\e[1m启用粗文本显示
dim\e[2m启用浅文本显示
so\e[3m启用突出显示,在终端不受支持
us\e[4m启用下划线文本显示
blink (部分终端不支持)\e[5m闪烁
--\e[6m快速闪烁或删除线(终端不支持)
mr\e[7m启用反向显示
invis\e[8m启用隐藏文本
--\e[9m闲置 (部分设备上为删除线)
--\e[10 - 19m字体选择,大部分终端不支持

清除属性

shell 脚本使用 tput xx转义序列描述
--\e[20m"Fraktur"(尖角体)字体,大部分终端并不支持
--\e[21m闲置
se\e[22m禁用粗文本、浅文本显示
se\e[23m禁用突出显示
ue\e[24m禁用带下划线的显示
--\e[25m禁用闪烁和删除线
--\e[26m闲置
--\e[27m禁用反向显示
--\e[28m禁用隐藏显示
--\e[29m闲置

前景色配置

shell 脚本使用 tput xx转义序列描述
setaf 0\e[30m将前景色设置为黑色
setaf 1\e[31m将前景色设置为红色
setaf 2\e[32m将前景色设置为绿色
setaf 3\e[33m将前景色设置为黄色
setaf 4\e[34m将前景色设置为蓝色
setaf 5\e[35m将前景色设置为杨红色
setaf 6\e[36m将前景色设置为青色
setaf 7\e[37m将前景色设置为白色
--\e[38m闲置
setaf 9\e[39m将前景色设置为默认色

背景色设置

shell 脚本使用 tput xx转义序列描述
setab 0\e[40m将背景色设置为黑色
setab 1\e[41m将背景色设置为红色
setab 2\e[42m将背景色设置为绿色
setab 3\e[43m将背景色设置为黄色
setab 4\e[44m将背景色设置为蓝色
setab 5\e[45m将背景色设置为杨红色
setab 6\e[46m将背景色设置为青色
setab 7\e[47m将背景色设置为白色
--\e[48m闲置
setab 9\e[49m将背景色设置为默认色

其他转义序列

重置终端

shell 脚本使用 tput xx转义序列描述
reset\ec将前景色和背景色设置为默认值,清除屏幕,并将光标移动到默认位置

整屏滚动

shell 脚本使用 tput xx转义序列描述

清除屏幕

shell 脚本使用 tput xx转义序列描述
cd\e[J\e[0J使用当前背景色清除到屏幕底部
--\e[1J使用当前背景色清理到顶部
cl\e[2J将屏幕清除为当前背景色。在部分终端上,还会将光标的位置重置到 home 位置
c\e[3J将清除整个屏幕并删除回滚缓冲区中的所有行(该特性是 xterm,其他终端也支持 )

清除行

shell 脚本使用 tput xx转义序列描述
ce\e[K\e[0K清除当前行到末尾
cb\e[1K清除行到开头
--\e[2K清除当前行

制表符

shell 脚本使用 tput xx转义序列描述
hts\e[W\e[0W在光标位置设置水平制表符
--\e[1W当前行设置垂直制表符
--\e[ 2 - 6 W冗余代码
--\e[g\e[0g清除当前光标位置的水平制表符
--\e[1g清除当前行的垂直制表符
--\e[2g仅清除当前行的水平和垂直制表位
tbc\e[3g清除所有的说平选项卡

参考文档