vimの256色対応の方法について改めて調べてみた。
自分の結論としては、.vimrcで設定するのではなく$TERMを適切に設定すればよい
(間違っている可能性ももちろんある)。

前提

  • vim : 8.0.295
  • Terminal.app : 2.6.1
  • iTerm2 : 3.0.13
  • tmux : 2.3
  • screen : 4.05.00

CUIのvimを対象にしているので、GUIのvimだと話が変わるかも。

vimを256色対応させるには

vimは環境変数の$TERMの値をもとにterm optionの値を決定する。
term optionの値が決まるとt_Co optionの値も自動的に決まる。

例えば、

$ echo $TERM
xterm-256color

のとき、

:echo &term
xterm-256color
:echo &t_Co
256

となる。

また、

$ echo $TERM
xterm

のとき、

:echo &term
xterm
:echo &t_Co
8

となる。

vimを256色対応させるには.vimrcにset t_Co=256と書くとしているWeb記事は多い (これとか)が、
実はvimは$TERMの値を検知してくれるのでt_Coに明示的に値を設定する必要はない(はず)。

なので、$TERMに256色対応した値を設定しさえすれば良いことになる。

$TERMに256色対応した値を設定するには

terminal emulator使用時(=terminal multiplexer非使用時)

terminal emulatorとは、Macで言うところのTerminal.appやiTermを指す。
(terminal emulatorが本当にこういった端末ウィンドウを指すのかは自信がないが、
恐らく合っているはず。。。)。

基本的にPreferencesからterminal typeを指定する。

  • Terminal.appの場合
    • 環境設定 -> プロファイル -> 詳細 -> ターミナルの宣言方法 でxterm-256colorを選ぶ
  • iTermの場合
    • Preferences -> Profiles -> Terminal -> Report Terminal Type でxterm-256colorを選ぶ
  • Gnomeの場合
    • 手元にLinuxのGUI環境がないので試せないが、同じくpreferencesからいけるはず

このterminal typeの値はssh使用時にも引き継がれる(自分が確認した限りそうだった)。

terminal multiplexer使用時

screenやtmuxのようなterminal multiplexerの使用時には$TERMは上書きされる。
そのため各々の設定ファイルに記述する必要がある。

  • screenの場合
    • ~/.screenrcにterm "screen-256color"と書く
    • ただし256色対応していないscreenの場合、
      $TERMの値こそscreen-256colorになっているものの
      実は256色は使用できないという事態に
      • 256色対応したscreenをソースからmake installする方法はこちらを参照
      • MacならHomebrewを使って、brew tap homebrew/dupesして
        brew install screen --enable-colors256でインストールできる
  • tmuxの場合
    • ~/.tmux.confにset -g default-terminal "screen-256color"と書く
    • tmux 2.3だと上の設定なしでも$TERMscreen-256colorになり256色対応できていた
      • terminal emulatorのterminal typeをxterm-256color以外にしても変わらず
      • tmuxのバージョンが新しければ自動的にscreen-256colorが設定される?

よくある間違い

ここここで指摘されている。

  • .bashrcや.bash_profileにexport TERM=xterm-256colorと書く
    • terminal multiplexerを使用したときにも設定されてしまう
  • .vimrcでset t_Co=256と書く
    • 256色表示になっていないのに値だけ256ということになりかねない

terminal emulator(あるいはmultiplexer)やvimが256色対応しているか調べる方法

この記事を参照。
256colors2.plがリンク切れなのでこちらから。

参考URL