True Color Terminal Vim on OSX

True Color 指的是紅綠藍三原色每個顏色都用 8bit 來記錄色階,總共有 2 的 24 次方種顏色,一般台灣是稱為 1677 萬色,也就是現在主流的電腦螢幕顏色數,不過終端機介面,一直以來都是活在 16 色和 256 色的世界,所以我一直都是只能用 256 色的 Vim,雖然 GVim 有支援 True Color,不過我用 GVim 實在很不習慣。

前陣子在 usevim 上看到 24-bit Vim 這篇文章,讓我對 True Color 的 Vim 環境燃起了一線希望,大概的狀況是據說有個 ISO-8613-3 有設計了 TrueColor 的 notation,就長的很像 BBS 上色語法,但是有三個數值。所以只要大家都有支援,就可以看到 1677 萬色的終端機了,而所謂的大家都有支援,指的是:

  1. 命令列軟體輸出有支援,這邊需要的就是 Vim 能支援輸出 ISO-8613-3 所定義的語法
  2. Terminal 軟體有支援,看到 ISO 語法能呈現對應的顏色,以 OSX 上來說,我用的是 iTerm 2

24-bit Vim 這篇文章說的是 Vim 有位 ZyX 有實做了 True Color 支援,而當時有個叫 Konsole 的 KDE Terminal 支援 True Color,所以要是你是用 KDE,就可以有 True Color 的 Vim 環境了,只是我用的環境幾乎都還是 OSX 為主。最近 iTerm 2 的作者在 Twitter 上說他們的 24-bit color 支援 merge 到 master 了,本來我一直在等 beta 版的更新,不過今天突然想到,可以去找 nightly build,然後去抓了測試用的 perl 檔來測試,發現真的可以用,下面兩張圖,上面那張是不支援的版本,下面的是支援的。

256 color terminal

true color terminal

接下來,就是 Vim 了,這部分我花了不少時間才弄出來,簡單說就是抓 ZyX 的 Vim 來自己 compile,不過也不是 clone 下來直接編譯就好,要換 branch 加上 config 等等:

hg clone https://bitbucket.org/ZyX_I/vim
cd vim
hg update 8abaeea8b2e5
cd src && make autoconf && cd ..

./configure \
  --enable-gui=no \
  --without-x \
  --enable-multibyte \
  --with-tlib=ncurses \
  --enable-cscope \
  --with-features=huge \
  --disable-nls \
  --enable-perlinterp \
  --enable-pythoninterp \
  --enable-rubyinterp \
  --enable-termtruecolor

make
make install

照理說上面這段複製貼上執行就可以了,然後,編譯安裝完,進入 Vim 可以執行version看看 termtruecolor 這個選項有沒有打開,有的話,那還差一步,就是在 .vimrc 裡面加上一行把設定打開:

set guicolors

然後你的 Terminal Vim 就會去使用 GVim 用的顏色設定了,以 solarized 為例,上面是 256 色的,下面是 True Color:

256 solarized

true color solarized

其實,差異蠻大的,讓我蠻意外,最後我找了一些以前沒辦法看到真相的 Vim color 來用,目前暫時是用 jellybeans

true color jellybeans

至於 iTerm 2 和 Vim 官方何時會支援呢,前者比較樂觀,下次 release 就有了,後者的話,大約半年前 Bram 有說會加到 TODO,不過到目前的 7.4 看來都還沒有認真要面對它的樣子...