如何让终端更多彩和灵活 --ANSI 转义序列介绍
简介
ANSI 转义字符是一种用于控制文本终端的特殊字符序列.
它们以 "\033"(8 进制的 33, 也可以是 16 进制的 x1B) 为起始,后跟一个或多个控制码,用于改变文本显示的颜色、样式、光标位置等
以下是一些常见的 ANSI 转义字符及其用法:
\033[0m
: 重置所有属性,将文本颜色和样式恢复为默认值.\033[1m
: 设置粗体文本.\033[4m
: 设置下划线文本.\033[7m
: 设置反显文本,即将前景色和背景色互换.\033[30m
到\033[37m
: 设置文本的前景色(文字颜色).\033[40m
到\033[47m
: 设置文本的背景色.\033[1G
: 将光标移动到行首.(跟\r
格式化控制符差不多)\033[nA
: 将光标向上移动 n 行.\033[nB
: 将光标向下移动 n 行.\033[nC
: 将光标向右移动 n 列.\033[nD
: 将光标向左移动 n 列.\033[y;xH
: 将光标移动到指定的行 y 和列 x.\033[2J
: 清屏.
这只是一些常见的 ANSI 转义字符示例,实际上还有很多其他的控制码.
这些转义字符通常用于控制终端输出的外观和行为.
详解
在转义字符中,\
表示转义,后面 033 则是控制码,后面接具体参数.
例如,0m 和 1m 和 7m 是设置文本属性,不必多言
\033[31m
开头的序列是设置文本颜色,分别代表如下
- \033 [30m:黑色
- \033 [31m:红色
- \033 [32m:绿色
- \033 [33m:黄色
- \033 [34m:蓝色
- \033 [35m:洋红
- \033 [36m:青色
- \033 [37m:白色
而 40m 开头的则同理,分别为黑红绿黄蓝紫青白
.
后面的光标移动控制码,则如描述,不多言.
此外,这几个不同的条目可以用分号 ;
隔开来组合显示,例如,显示加粗的红底绿字,可以如下
cpp
1 | printf("\033[1;32;41m hello-world \033[0m"); |
编写进度条的例子
了解了以上知识,我们就开始写一个彩色进度条的例子
用 cpp 编写,大致逻辑就是一个小时间循环,每个循环里打印递增数量的字符
cpp
1 |
|
代码如上,不多解释。运行效果如下
在 Linux 终端提示符的应用
大家可能经常遇到 root 用户下没有颜色显示的问题,这其实是在 ~/.bashrc
里面定义的终端颜色
比如这样,全是白色
修改 ~/.bashrc
文件,示例如下,核心就在最后一行,颜色代码也是一样的,其他规则可以自行百度
sh
1 | # ~/.bashrc: executed by bash(1) for non-login shells. |
改完就有颜色啦
参考文章:
本博客采用 CC BY-NC-SA 4.0 许可。转载请声明来自 Juice's Blog!