ANSI颜色转义序列列表

在大多数终端上,可以使用\033 ANSI转义序列对输出进行着色。

我正在寻找所有支持的颜色和选项的列表(如明亮和闪烁)。

由于支持它们的终端之间可能存在差异,因此我主要对xterm兼容终端支持的序列感兴趣。

348585 次浏览

如何:

< p > 编码字符集的控制函数,第5版(1991年6月) - 定义颜色控制代码的标准,显然xterm.

也支持该标准

SGR 38和48最初由ECMA-48保留,但几年后在联合ITU、IEC和ISO标准中得到充实,该标准分为几个部分,并(在许多其他内容中)记录了直接的颜色索引颜色的SGR 38/48控制序列:

xterm 在维基百科页上的ANSI转义码的表格中有一列

您正在寻找的ANSI转义序列是“选择图形再现”子集。所有这些都有形式

\033[XXXm

其中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)。

如下表所示,您可以设置大量的文本属性,如粗体、字体、下划线、&c。

字体效果

代码 效果 请注意
0 复位/正常 所有属性关闭
1 大胆或增加强度
2 微弱(强度降低) 没有得到广泛支持。
3. 斜体 没有得到广泛支持。有时被当作逆。
4 下划线
5 缓慢闪烁 每分钟少于150个
6 快速闪烁 ms - dos ANSI.SYS;每分钟150+;没有得到广泛支持
7 [[反向视频]] 交换前景和背景颜色
8 隐藏 没有得到广泛支持。
9 字符清晰,但有删除标记。没有得到广泛支持。
10 初级(默认)字体
11-19 不同的字体 选择替代字体n-10
20. 德文活字 几乎从未得到支持
21 取消粗体或双下划线 大胆的离开没有广泛的支持;几乎不支持双下划线。
22 颜色或强度正常 既不大胆也不懦弱
23 不是斜体,不是德国尖角字体
24 强调了 没有单下划线或双下划线的
25 眨眼了
27 反了
28 揭示 隐藏了
29 没有划掉
30-37 设置前景色 参见下面的颜色表
38 设置前景色 下一个参数是5;<n>2;<r>;<g>;<b>,见下文
39 默认前景色 定义的实现(根据标准)
40-47 设置背景色 参见下面的颜色表
48 设置背景色 下一个参数是5;<n>2;<r>;<g>;<b>,见下文
49 默认背景色 定义的实现(根据标准)
51 框架
52 包围
53 上划线
54 没有框定或包围的
55 不上划线
60 表意文字下划线 几乎从未得到支持
61 表意文字双下划线 几乎从未得到支持
62 表意文字上划线 几乎从未得到支持
63 表意文字双线重叠 几乎从未得到支持
64 表意文字重音标记 几乎从未得到支持
65 表意文字属性关闭 重置所有60-64的效果
90 - 97 设置明亮的前景色 术语(不符合标准)
100 - 107 设置明亮的背景色 术语(不符合标准)
< / div >

2比特的颜色

你已经有这个了!

4比特的颜色

实现终端颜色的标准从有限的(4位)选项开始。下表列出了各种终端模拟器所使用的背景色和前景色的RGB值:

由各种终端模拟器实现的ANSI颜色表

使用上面的方法,你可以在绿色背景上创建红色文本(但是为什么呢?)

\033[31;42m

11种颜色(插曲)

在布伦特·柏林和保罗·凯的《基本颜色术语:它们的普遍性和演化》一书中,他们使用了从不同语系的20种不同语言中收集的数据,确定了11种可能的基本颜色类别:白色、黑色、红色、绿色、黄色、蓝色、棕色、紫色、粉红色、橙色和灰色。

柏林和凯发现,在少于最多11种颜色类别的语言中,颜色遵循特定的进化模式。这种模式如下:

  1. 所有语言都包含黑色(冷色)和白色(亮色)的术语。
  2. 如果一种语言包含三个术语,那么它就包含一个表示红色的术语。
  3. 如果一种语言包含四个术语,那么它包含一个表示绿色或黄色的术语(而不是两个)。
  4. 如果一种语言包含五个术语,那么它就同时包含绿色和黄色的术语。
  5. 如果一门语言包含六个术语,那么它就包含一个表示蓝色的术语。
  6. 如果一门语言包含七个术语,那么它就包含一个表示棕色的术语。
  7. 如果一种语言包含八个或八个以上的术语,那么它就包含紫色、粉色、橙色或灰色的术语。

这可能就是为什么故事贝奥武夫只包含黑色、白色和红色。这也可能是圣经不包含蓝色的原因。荷马的奥德赛包含了近200次黑色和大约100次白色。红色出现15次,而黄色和绿色只出现10次。(更多信息请点击这里)

语言之间的差异也很有趣:请注意,英语和汉语使用了大量不同的颜色词。然而,深入研究这些语言会发现,每种语言都以不同的方式使用颜色。(更多的信息)

中文vs英文颜色名。图片改编自“muyueh.com”/ > < / ></p>
<p>一般来说,人类语言中颜色的命名、使用和分组是令人着迷的。现在,回到节目上。</p>
<h1>8位(256)颜色</h1>
<p>技术进步了,有了256种预选颜色的表格,如下图所示。</p>
<p><a href=256-bit colour mode for ANSI转义序列

使用上面的这些,你可以做出粉色的文本,如下所示:

\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

支持“本色”;terminals被列出在这里

以上大部分内容来自维基百科页面“ANSI转义码"”。

一个方便的提醒自己的脚本

由于我经常处于试图记住什么颜色是什么颜色的位置,所以我有一个名为:~/bin/ansi_colours的方便脚本:

#!/usr/bin/python


print "\\033[XXm"


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 colour"
print "\\033[2K - Clear Line"
print "\\033[<L>;<C>H OR \\033[<L>;<C>f puts 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"
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"
print " "
print "\\033[4m  Underline on"
print "\\033[24m Underline off"
print "\\033[1m  Bold on"
print "\\033[21m Bold off"

这个打印

简单的ANSI颜色

这绝对与你的终端有关。VTE不支持闪烁,如果你根据VTE使用gnome-terminaltildaguaketerminatorxfce4-terminal等,你将不会有闪烁 如果你在VTE上使用或想使用blink,你必须使用xterm
infocmp命令可以使用终端名:

#infocmp vt100
#infocmp xterm
#infocmp vte

例如:

# infocmp vte
#   Reconstructed via infocmp from file: /usr/share/terminfo/v/vte
vte|VTE aka GNOME Terminal,
am, bce, mir, msgr, xenl,
colors#8, cols#80, it#8, lines#24, ncv#16, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz\{\{||}}~~,
bel=^G, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J,
cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
el=\E[K, enacs=\E)0, home=\E[H, hpa=\E[%i%p1%dG, ht=^I,
hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m,
is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8,
kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~,
kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C,
kb2=\E[E, kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kf1=\EOP,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P,
kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~,
kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~,
kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~,
kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R,
kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~,
kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~,
kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~,
kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS,
kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~,
kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~,
kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R,
kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khome=\EOH,
kich1=\E[2~, kind=\E[1;2B, kmous=\E[M, knp=\E[6~,
kpp=\E[5~, kri=\E[1;2A, kslt=\E[4~, meml=\El, memu=\Em,
op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, ritm=\E[23m,
rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l,
rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\Ec,
rs2=\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h,
sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;,
sgr0=\E[0m\017, sitm=\E[3m, smacs=^N, smam=\E[?7h,
smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,

对于那些除了上述语言之外没有得到正确结果的人,如果你使用c#将文本打印到控制台(终端)窗口,你应该将“033 \”替换为“\ x1b”。在Visual Basic中,它是Chrw (27)

下面是一些代码,它显示了所有与颜色有关的转义序列。为了使代码正常工作,您可能需要获得实际的转义字符。

@echo off
:top
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.
echo [101;93m NORMAL FOREGROUND COLORS [0m
echo ^<ESC^>[30m [30mBlack[0m (black)
echo ^<ESC^>[31m [31mRed[0m
echo ^<ESC^>[32m [32mGreen[0m
echo ^<ESC^>[33m [33mYellow[0m
echo ^<ESC^>[34m [34mBlue[0m
echo ^<ESC^>[35m [35mMagenta[0m
echo ^<ESC^>[36m [36mCyan[0m
echo ^<ESC^>[37m [37mWhite[0m
echo.
echo [101;93m NORMAL BACKGROUND COLORS [0m
echo ^<ESC^>[40m [40mBlack[0m
echo ^<ESC^>[41m [41mRed[0m
echo ^<ESC^>[42m [42mGreen[0m
echo ^<ESC^>[43m [43mYellow[0m
echo ^<ESC^>[44m [44mBlue[0m
echo ^<ESC^>[45m [45mMagenta[0m
echo ^<ESC^>[46m [46mCyan[0m
echo ^<ESC^>[47m [47mWhite[0m (white)
echo.
echo [101;93m STRONG FOREGROUND COLORS [0m
echo ^<ESC^>[90m [90mWhite[0m
echo ^<ESC^>[91m [91mRed[0m
echo ^<ESC^>[92m [92mGreen[0m
echo ^<ESC^>[93m [93mYellow[0m
echo ^<ESC^>[94m [94mBlue[0m
echo ^<ESC^>[95m [95mMagenta[0m
echo ^<ESC^>[96m [96mCyan[0m
echo ^<ESC^>[97m [97mWhite[0m
echo.
echo [101;93m STRONG BACKGROUND COLORS [0m
echo ^<ESC^>[100m [100mBlack[0m
echo ^<ESC^>[101m [101mRed[0m
echo ^<ESC^>[102m [102mGreen[0m
echo ^<ESC^>[103m [103mYellow[0m
echo ^<ESC^>[104m [104mBlue[0m
echo ^<ESC^>[105m [105mMagenta[0m
echo ^<ESC^>[106m [106mCyan[0m
echo ^<ESC^>[107m [107mWhite[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^<ESC^>[31m                     [31mred foreground color[0m
echo ^<ESC^>[7m                      [7minverse foreground ^<-^> background[0m
echo ^<ESC^>[7;31m                   [7;31minverse red foreground color[0m
echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m
echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m
pause > nul
goto top