Skip to content

终端颜色与样式 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[0m

7. 示例代码

下面是一个示例程序,展示了如何在终端中使用各种 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;
}

Last updated: