您正在寻找的 ANSI 转义序列是“选择图形呈现”子集。所有这些都有以下形式
\033[XXXm
where XXX
是一系列以分号分隔的参数。
比如说,在 C 中将文本设置为红色、粗体和下划线(我们将在下面讨论许多其他选项),您可以这样写:
printf("\033[31;1;4mHello\033[0m");
在 C++ 中你会使用
std::cout<<"\033[31;1;4mHello\033[0m";
在Python3中你会使用
print("\033[31;1;4mHello\033[0m")
在 Bash 中你可以使用
echo -e "\033[31;1;4mHello\033[0m"
其中第一部分使文本变为红色(31
), 大胆的 (1
)、下划线(4
)最后一部分清除了所有这些(0
).
如下表所述,您可以设置大量文本属性,例如粗体、字体、下划线等。
字体效果
Code |
Effect |
Note |
0 |
Reset / Normal |
all attributes off |
1 |
Bold or increased intensity |
|
2 |
Faint (decreased intensity) |
Not widely supported. |
3 |
Italic |
Not widely supported. Sometimes treated as inverse. |
4 |
Underline |
|
5 |
Slow Blink |
less than 150 per minute |
6 |
Rapid Blink |
MS-DOS ANSI.SYS; 150+ per minute; not widely supported |
7 |
[[reverse video]] |
swap foreground and background colors |
8 |
Conceal |
Not widely supported. |
9 |
Crossed-out |
Characters legible, but marked for deletion. Not widely supported. |
10 |
Primary(default) font |
|
11–19 |
Alternate font |
Select alternate font n-10
|
20 |
Fraktur |
hardly ever supported |
21 |
Bold off or Double Underline |
Bold off not widely supported; double underline hardly ever supported. |
22 |
Normal color or intensity |
Neither bold nor faint |
23 |
Not italic, not Fraktur |
|
24 |
Underline off |
Not singly or doubly underlined |
25 |
Blink off |
|
27 |
Inverse off |
|
28 |
Reveal |
conceal off |
29 |
Not crossed out |
|
30–37 |
Set foreground color |
See color table below |
38 |
Set foreground color |
Next arguments are 5;<n> or 2;<r>;<g>;<b> , see below |
39 |
Default foreground color |
implementation defined (according to standard) |
40–47 |
Set background color |
See color table below |
48 |
Set background color |
Next arguments are 5;<n> or 2;<r>;<g>;<b> , see below |
49 |
Default background color |
implementation defined (according to standard) |
51 |
Framed |
|
52 |
Encircled |
|
53 |
Overlined |
|
54 |
Not framed or encircled |
|
55 |
Not overlined |
|
60 |
ideogram underline |
hardly ever supported |
61 |
ideogram double underline |
hardly ever supported |
62 |
ideogram overline |
hardly ever supported |
63 |
ideogram double overline |
hardly ever supported |
64 |
ideogram stress marking |
hardly ever supported |
65 |
ideogram attributes off |
reset the effects of all of 60-64 |
90–97 |
Set bright foreground color |
aixterm (not in standard) |
100–107 |
Set bright background color |
aixterm (not in standard) |
2 位颜色
你已经有了这个!
4 位颜色
实现终端颜色的标准始于有限的(4 位)选项。下表列出了各种终端仿真器使用的背景色和前景色的 RGB 值:
使用上面的内容,您可以使用以下命令在绿色背景上制作红色文本(但为什么?):
\033[31;42m
11 种颜色(插曲)
在他们的书《基本颜色术语:它们的普遍性和演变》中,Brent Berlin 和 Paul Kay 使用从一系列语系的 20 种不同语言收集的数据来识别 11 种可能的基本颜色类别:白色、黑色、红色、绿色、黄色、蓝色、棕色、紫色、粉色、橙色和灰色。
柏林和凯发现,在颜色类别少于最多十一种的语言中,颜色遵循特定的进化模式。该模式如下:
- 所有语言都包含黑色(冷色)和白色(亮色)术语。
- 如果一种语言包含三个术语,则它包含一个红色术语。
- 如果一种语言包含四个术语,则它包含一个表示绿色或黄色的术语(但不能同时包含两者)。
- 如果一种语言包含五个术语,则它同时包含绿色和黄色术语。
- 如果一种语言包含六个术语,则它包含一个蓝色术语。
- 如果一种语言包含七个术语,那么它就包含一个棕色术语。
- 如果一种语言包含八个或更多术语,则它包含紫色、粉色、橙色或灰色术语。
这可能就是故事的原因Beowulf仅包含黑色、白色和红色。这也可能是为什么Bible不包含蓝色。荷马的Odyssey含有黑色近200倍,白色约100倍。红色出现了 15 次,而黄色和绿色只出现了 10 次。 (更多信息请点击这里)
语言之间的差异也很有趣:请注意英语和汉语使用大量不同的颜色词。然而,深入研究这些语言表明,每种语言都以不同的方式使用颜色。 (更多信息)
一般来说,人类语言中颜色的命名、使用和分组是令人着迷的。现在,回到节目。
8 位 (256) 色
技术进步了,可以使用包含 256 种预选颜色的表格,如下所示。
使用上面的这些,你可以制作粉红色的文本,如下所示:
\033[38;5;206m #That is, \033[38;5;<FG COLOR>m
并使用以下命令制作清晨的蓝色背景
\033[48;5;57m #That is, \033[48;5;<BG COLOR>m
当然,您可以将这些结合起来:
\033[38;5;206;48;5;57m
8 位颜色排列如下:
0x00-0x07: standard colors (same as the 4-bit colours)
0x08-0x0F: high intensity colors
0x10-0xE7: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
0xE8-0xFF: grayscale from black to white in 24 steps
所有颜色
现在我们生活在未来,可以使用以下方式获得完整的 RGB 光谱:
\033[38;2;<r>;<g>;<b>m #Select RGB foreground color
\033[48;2;<r>;<g>;<b>m #Select RGB background color
因此,您可以使用以下方法将粉红色文本放在棕色背景上
\033[38;2;255;82;197;48;2;155;106;0mHello
列出了对“真彩色”终端的支持here.
以上大部分内容摘自维基百科页面“ANSI 转义码".
一个提醒自己的方便脚本
由于我经常试图记住什么颜色是什么,所以我有一个方便的脚本,名为:~/bin/ansi_colours
:
#!/usr/bin/env python3
for i in range(30, 37 + 1):
print("\033[%dm%d\t\t\033[%dm%d" % (i, i, i + 60, i + 60))
print("\033[39m\\033[49m - Reset color")
print("\\033[2K - Clear Line")
print("\\033[<L>;<C>H or \\033[<L>;<C>f - Put the cursor at line L and column C.")
print("\\033[<N>A - Move the cursor up N lines")
print("\\033[<N>B - Move the cursor down N lines")
print("\\033[<N>C - Move the cursor forward N columns")
print("\\033[<N>D - Move the cursor backward N columns\n")
print("\\033[2J - Clear the screen, move to (0,0)")
print("\\033[K - Erase to end of line")
print("\\033[s - Save cursor position")
print("\\033[u - Restore cursor position\n")
print("\\033[4m - Underline on")
print("\\033[24m - Underline off\n")
print("\\033[1m - Bold on")
print("\\033[21m - Bold off")
这打印