vault backup: 2026-01-22 20:19:30

This commit is contained in:
2026-01-22 20:19:30 +08:00
parent 4f13f2f674
commit b810d55176
283 changed files with 52 additions and 86 deletions

View File

@@ -0,0 +1,208 @@
作者:粤嵌-李林峰
# 终端显示字体和颜色的方法
在终端中使用printf输出时可以通过ANSI转义码来控制文本的颜色、背景色和字体样式。下面详细介绍各种控制方法。
## 基本格式
ANSI转义码的基本格式为
```c
printf("\033[属性值;...;属性值 m 文本内容 \033[0m");
```
其中:
- \033 是ESC字符的八进制表示也可以用\x1b十六进制表示
- [ 开始控制序列
- 属性值 是控制代码,多个属性用分号分隔
- m 结束控制序列
- \033[0m 重置所有属性
## 字体样式控制
| 代码 | 效果 |
| -- | -- |
| 0 | 重置所有属性 |
| 1 | 加粗/高亮 |
| 2 | 暗淡/弱化 |
| 3 | 斜体 |
| 4 | 下划线 |
| 5 | 闪烁 |
| 7 | 反显(反色) |
| 8 | 隐藏 |
| 9 | 删除线 |
示例:
```c
printf("\033[1m加粗文本\033[0m\n");
printf("\033[3m斜体文本\033[0m\n");
printf("\033[4m下划线文本\033[0m\n");
```
## 前景色(文字颜色)
| 代码 | 颜色 |
| -- | -- |
| 30 | 黑色 |
| 31 | 红色 |
| 32 | 绿色 |
| 33 | 黄色 |
| 34 | 蓝色 |
| 35 | 洋红 |
| 36 | 青色 |
| 37 | 白色 |
| 90 | 亮黑 |
| 91 | 亮红 |
| 92 | 亮绿 |
| 93 | 亮黄 |
| 94 | 亮蓝 |
| 95 | 亮洋红 |
| 96 | 亮青 |
| 97 | 亮白 |
示例:
```c
printf("\033[31m红色文字\033[0m\n");
printf("\033[92m亮绿色文字\033[0m\n");
```
## 背景色
| 代码 | 颜色 |
| -- | -- |
| 40 | 黑色 |
| 41 | 红色 |
| 42 | 绿色 |
| 43 | 黄色 |
| 44 | 蓝色 |
| 45 | 洋红 |
| 46 | 青色 |
| 47 | 白色 |
| 100 | 亮黑 |
| 101 | 亮红 |
| 102 | 亮绿 |
| 103 | 亮黄 |
| 104 | 亮蓝 |
| 105 | 亮洋红 |
| 106 | 亮青 |
| 107 | 亮白 |
示例:
```c
printf("\033[41m红色背景\033[0m\n");
printf("\033[104m亮蓝色背景\033[0m\n");
```
## 组合使用
可以同时设置多个属性,用分号分隔:
```c
printf("\033[1;31;42m加粗红色文字绿色背景\033[0m\n");
printf("\033[4;93;44m下划线亮黄色文字蓝色背景\033[0m\n");
```
## 256色模式
对于支持256色的终端可以使用更丰富的颜色
前景色:
```c
printf("\033[38;5;颜色编号m文本\033[0m");
```
背景色:
```c
printf("\033[48;5;颜色编号m文本\033[0m");
```
颜色编号范围0-255其中
- 0-15标准16色
- 16-2316×6×6 RGB立方
- 232-255灰度
示例:
```c
printf("\033[38;5;196m红色文字\033[0m\n");
printf("\033[48;5;226m黄色背景\033[0m\n");
```
## RGB真彩色模式
最新终端支持RGB真彩色
前景色:
```c
printf("\033[38;2;R;G;Bm文本\033[0m");
```
背景色:
```c
printf("\033[48;2;R;G;Bm文本\033[0m");
```
其中R,G,B为0-255的数值。
示例:
```c
printf("\033[38;2;255;100;100m自定义颜色文字\033[0m\n");
printf("\033[48;2;100;200;255m自定义背景色\033[0m\n");
```
## 注意事项
1. 不是所有终端都支持所有颜色和效果
1. 使用后记得用\033[0m重置属性
1. 某些效果(如闪烁)可能被终端禁用
1. Windows CMD默认不支持需要启用ANSI支持或使用其他终端
## 实用技巧
可以定义宏简化使用:
```c
#define RED "\033[31m"
#define GREEN "\033[32m"
#define RESET "\033[0m"
printf(RED "错误: " RESET "发生错误\n");
```
或者定义函数:
```c
void print_color(const char* color, const char* text)
{
printf("%s%s" RESET, color, text);
}
print_color("\033[1;34m", "重要信息");
```
参考文件:
[terminal_colors.h](attachments/WEBRESOURCEf8f411dd54c53da227a89fc7031bb0c7terminal_colors.h)