终端颜色

来源:互联网 发布:pink ward知乎 编辑:程序博客网 时间:2024/06/05 09:33
如果你经常使用终端,我相信你一定玩过终端的颜色设置。比如`ls` 命令的输出、终端命令提示符、git 日志等等,它们的输出都是有各种颜色,这帮我们更快速方便的获取信息,每个人都喜欢漂亮的东西,尤其是每天不得不使用的。这篇文章主要整理了关于终端颜色的内容。

Escape sequences

你可能看到过例如\e[32m 或者 \x1b[1;31m ,它们是ANSI escape codes 使用的默认颜色,所有的ANSI escape sequences以它作为开始,当然 esc ,这里有几种esc 的编码方式:

方法 编码 Shell \e ASCII Hex \0x1B ASCII Oct \033

所以\x1b[31;3m , \e[31;4m 是相同结果的不同表示方法,让我们看一下这个序列的结构。

Sequence
\x1b[Control Sequence Introducer 它是由16进制 ASCII编码的 ESC 和一个[ .
31;4 是一个以; 分隔的指令列表,通常他的格式如下:

[<PREFIX>];[<COLOR>];[<TEXT DECORATION>]

例如31;4 意思是“没有前缀,红色,有下划线“。<PREFIX 通常使用256颜色模式。

最后的m 标志着控制序列的结束,所以终端能知道m 后的字符不是颜色编码。

下边的命令应该能打印出红色、有下划线的“hello“:

> echo "\x1b[31;4mHello\x1b[0m"

\x1b[0m 是重置所有属性。

Color codes

很早以前,终端都不一样,一些可能只能显示16种颜色,而另一些可能会显示256种颜色。现在你工作的终端应该能显示1600万种颜色,但是终端软件模拟老的终端,它们经常只支持很少的颜色。具体支持的颜色数,取决于终端的设定。

下边命令可以列出16颜色模式下所有的颜色:

> for code in {30..37}; do \echo -en "\e[${code}m"'\\e['"$code"'m'"\e[0m"; \echo -en "  \e[$code;1m"'\\e['"$code"';1m'"\e[0m"; \echo -en "  \e[$code;3m"'\\e['"$code"';3m'"\e[0m"; \echo -en "  \e[$code;4m"'\\e['"$code"';4m'"\e[0m"; \echo -e "  \e[$((code+60))m"'\\e['"$((code+60))"'m'"\e[0m"; \done

你可能得到如下信息:
Color
呃,事实上有可能会完全不同,你可以设置红色看起来像蓝色,但是我不推荐这样,因为它可能使bash , zsh 的颜色设置产生混乱,或使任何运行在终端上的软件产生问题。

下边是一些颜色码:

Color Mode Code Basic 8 colors 30…37 Basic “high contrast” colors 90…97 xterm-256 colors 0…255

在颜色码后边设置文本描述:

Style Code Bold 1 Underscore 4 Background 3

如果颜色码前缀为38;5 它将被解释为256颜色模式。例如:\e[38;5;91m 将被解释为紫色,而\e[91m 将被解释为亮红色。

原创粉丝点击