判断终端色彩支持情况的方法

黑白的世界总没有彩色的世界精彩,最初的Linux或其他系统的Shell终端肯定只有黑白的,之后逐渐出现了支持8色、16色、256色及真彩色的终端。目前主流的终端一般都支持256色,未来的趋势是支持24位真彩色。那如何判断当前使用的是哪种模式,以及如何更改设置呢?本文就以Ubuntu下Gnome-Terminal为例介绍一下设置方法,理论上应该适用于所有Linux终端。

终端类型及颜色支持

使用tput colors命令即可查看当前终端支持几种颜色;
使用以下命令即可列出系统所支持的所有终端类型,以及他们支持的颜色位数:

1
for T in `find /usr/share/terminfo -type f -printf '%f '`;do echo "$T `tput -T $T colors`";done|sort -nk2|tail -n20

示例输出如下:

1
Eterm-88color 88
rxvt-88color 88
xterm-88color 88
xterm+88color 88
Eterm-256color 256
gnome-256color 256
iTerm.app 256
konsole-256color 256
mlterm-256color 256
mrxvt-256color 256
nsterm 256
nsterm-256color 256
putty-256color 256
rxvt-256color 256
rxvt-unicode-256color 256
screen-256color-bce-s 256
screen-256color-s 256
terminator 256
vte-256color 256
xterm+256color 256

$TERM变量代表当前终端类型,可使用echo $TERM命令查看。

256色支持

运行以下命令,若输出了完整的256种颜色,就说明当前终端支持256色:

1
(x=`tput op` y=`printf %76s`;for i in {0..256};do o=00$i;echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x;done)

若只有前8种颜色,说明当前配置是8色模式,默认情况下,Ubuntu中的Gnome-Terminal就只开启了8色支持。此时可通过修改~/.bashrc文件将其改为256色,在.bashrc文件中加入以下代码即可:

1
2
3
4
5
6
7
8
case "$TERM" in
xterm)
export TERM=xterm-256color
;;
screen)
export TERM=screen-256color
;;
esac

真彩色支持

很遗憾,Ubuntu下的终端目前尚没有支持真彩色的。可使用以下脚本代码进行检测:

1
2
3
4
5
6
7
8
9
10
11
12
13
awk 'BEGIN{
s="/\\/\\/\\/\\/\\"; s=s s s s s s s s;
for (colnum = 0; colnum<77; colnum++) {
r = 255-(colnum*255/76);
g = (colnum*510/76);
b = (colnum*255/76);
if (g>255) g = 510-g;
printf "\033[48;2;%d;%d;%dm", r,g,b;
printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
printf "%s\033[0m", substr(s,colnum+1,1);
}
printf "\n";
}'

如果支持真彩色的话,输出效果如下:

若不支持,是无法显示出连续的色彩的:

Vim中256色设置

要让Vim很好的支持256色需要在.vimrc文件中进行下设置,添加以下代码:

1
set t_Co=256

如果使用了配色主题插件,也要在插件设置进行类似的设置,以最流行的Solarized主题为例,需要加上以下设置:

1
let g:solarized_termcolors=256

参考资料:
如何查看Linux终端是否支持256色
icymind/NeoSolarized

文章目录
  1. 1. 终端类型及颜色支持
  2. 2. 256色支持
  3. 3. 真彩色支持
  4. 4. Vim中256色设置