UPDATE: GNOME Terminal 从 3.12 的某个小版本后就不再设置 COLORTERM 环境变量,因而判断是否是 GNOME Terminal 的方法变得更加 tricky 了。

其实标题有点歧义, GNOME Terminal 本来就支持256色,不过也许是为了最大兼容,它并没有设置环境变量来声称自己支持。所以,只需要 export TERM=xterm-256color 就能让命令行程序知道终端支持256色了。把它加进你的 .bashrc 或者 .profile ,打开一个新 Bash 或者新 session 看看你的终端程序(比如 vim )等等是不是颜色丰富了一些呢?

另外,如果你使用 tmux (byobu),可以修改你的 .tmux.conf 文件( byobu 则是 .byobu/.tmux.conf ),让 screen/tmux 会话也更漂亮一些:

1
set -g default-terminal "screen-256color"

不过等等!修改 TERM 变量其实是一件很危险 + tricky 的事情,尤其当你使用 screen/tmux 之类东西的时候(参见 tmux FAQ )……而且,你很有可能使用不止一种终端模拟器/tty,非 GNOME Terminal 也许就不支持256色,甚至压根不是 xterm 系,这样设置 TERM 可能导致 terminfo 出错。

折腾了很久(期间顺便弄清楚了这几个配置文件分别是在什么时候、什么情况下以什么顺序加载)。最后挑选了一个最佳方案,即在 .bashrc 中加入这一段:

1
2
3
4
if [[ ($COLORTERM == gnome-terminal || $(cat /proc/$PPID/cmdline) == *gnome-terminal* )
    && $TERM != screen* ]]; then
    export TERM=xterm-256color
fi

如此便仅在 GNOME Terminal 、且不在 screen/tmux 会话中时设置为 xterm-256color 。此外,如果你有使用一些快捷键等方式快速启动 Byobu/screen/tmux ,那么要注意检查一下快捷键所对应的命令应该类似: env TERM=xterm-256color byobu (这类直接调用一般不会执行 .bashrc )。(事实上, Archlinux 的 byobu 包中带的 byobu.desktop 的启动参数正是如此。)

最后上张图:

GNOME Terminal with Byobu and Vim