终端颜色与样式 ANSI 转义码总结
本文档总结了终端(如 Linux、macOS、WSL 等)中使用的 ANSI 转义码及其各种变种,包括基本颜色、亮色、背景色、256 色模式、RGB 颜色以及其他文本样式和重置颜色的用法。
1. 基本颜色
ANSI 颜色代码格式为:
\033[<参数>m其中 \033(或 \e)是 ESC 转义符。
1.1 前景色(文本颜色)
| 颜色 | ANSI 代码 |
|---|---|
| 黑色 ⬛ | \033[30m |
| 红色 🟥 | \033[31m |
| 绿色 🟩 | \033[32m |
| 黄色 🟨 | \033[33m |
| 蓝色 🟦 | \033[34m |
| 洋红 🟪 | \033[35m |
| 青色 🟦 | \033[36m |
| 白色 ⬜ | \033[37m |
1.2 背景色
| 颜色 | ANSI 代码 |
|---|---|
| 黑色 ⬛ | \033[40m |
| 红色 🟥 | \033[41m |
| 绿色 🟩 | \033[42m |
| 黄色 🟨 | \033[43m |
| 蓝色 🟦 | \033[44m |
| 洋红 🟪 | \033[45m |
| 青色 🟦 | \033[46m |
| 白色 ⬜ | \033[47m |
2. 亮色(高亮 / 加粗)
在基本颜色的代码基础上,还可以使用亮色(也可通过粗体 \033[1m 来实现一定程度的加亮效果)。
下面的亮色代码通常也被称作“明亮”或“浅色”版本。
2.1 前景亮色
| 颜色 | ANSI 代码 |
|---|---|
| 亮黑色 ⬛ | \033[90m |
| 亮红色 🟥 | \033[91m |
| 亮绿色 🟩 | \033[92m |
| 亮黄色 🟨 | \033[93m |
| 亮蓝色 🟦 | \033[94m |
| 亮洋红 🟪 | \033[95m |
| 亮青色 🟦 | \033[96m |
| 亮白色 ⬜ | \033[97m |
2.2 背景亮色
| 颜色 | ANSI 代码 |
|---|---|
| 亮黑色 ⬛ | \033[100m |
| 亮红色 🟥 | \033[101m |
| 亮绿色 🟩 | \033[102m |
| 亮黄色 🟨 | \033[103m |
| 亮蓝色 🟦 | \033[104m |
| 亮洋红 🟪 | \033[105m |
| 亮青色 🟦 | \033[106m |
| 亮白色 ⬜ | \033[107m |
3. 其他文本样式
| 样式 | ANSI 代码 | 说明 |
|---|---|---|
| 复位 | \033[0m | 重置所有样式 |
| 粗体 | \033[1m | 加粗 / 高亮文本 |
| 暗色 | \033[2m | 使文本颜色暗淡 |
| 斜体 | \033[3m | 斜体(部分终端支持) |
| 下划线 | \033[4m | 添加下划线 |
| 闪烁 | \033[5m | 使文本闪烁 |
| 反色 | \033[7m | 前景色与背景色交换 |
| 隐藏文本 | \033[8m | 隐藏文本 |
| 删除线 | \033[9m | 文本显示删除线 |
4. 256 色模式
如果终端支持 256 色,可以使用以下格式指定颜色:
前景色:
\033[38;5;<颜色代码>m背景色:
\033[48;5;<颜色代码>m
示例:
设置前景色为绿色(颜色代码 82):
\033[38;5;82m设置背景色为红色(颜色代码 196):
\033[48;5;196m
5. True Color(24 位颜色 / RGB)
如果终端支持 True Color,可使用 24 位 RGB 颜色。格式如下:
前景色:
\033[38;2;<R>;<G>;<B>m背景色:
\033[48;2;<R>;<G>;<B>m
示例:
设置前景色为橙色 (RGB: 255,165,0):
\033[38;2;255;165;0m设置背景色为青色 (RGB: 0,255,255):
\033[48;2;0;255;255m
6. 复位颜色
无论使用哪种颜色或样式,都可以使用以下 ANSI 转义码来重置终端样式:
\033[0m7. 示例代码
下面是一个示例程序,展示了如何在终端中使用各种 ANSI 转义码:
c++
#include <iostream>
int main() {
std::cout << "\033[31m红色文本\033[0m" << std::endl;
std::cout << "\033[32m绿色文本\033[0m" << std::endl;
std::cout << "\033[34m蓝色文本\033[0m" << std::endl;
std::cout << "\033[1;33m亮黄色文本\033[0m" << std::endl;
std::cout << "\033[7m反色文本\033[0m" << std::endl;
std::cout << "\033[4m下划线文本\033[0m" << std::endl;
std::cout << "\033[38;5;82m256 色绿色文本\033[0m" << std::endl;
std::cout << "\033[38;2;255;165;0mTrue Color 橙色文本\033[0m" << std::endl;
std::cout << "\033[0m恢复正常文本" << std::endl;
return 0;
}