vimの256色対応させるのにset t_Co=256は必要ない
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
を選ぶ
- Preferences -> Profiles -> Terminal -> Report Terminal Type で
- 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
でインストールできる
- ~/.screenrcに
- tmuxの場合
- ~/.tmux.confに
set -g default-terminal "screen-256color"
と書く - tmux 2.3だと上の設定なしでも
$TERM
がscreen-256color
になり256色対応できていた- terminal emulatorのterminal typeを
xterm-256color
以外にしても変わらず - tmuxのバージョンが新しければ自動的に
screen-256color
が設定される?
- terminal emulatorのterminal typeを
- ~/.tmux.confに
よくある間違い
- .bashrcや.bash_profileに
export TERM=xterm-256color
と書く- terminal multiplexerを使用したときにも設定されてしまう
- .vimrcで
set t_Co=256
と書く- 256色表示になっていないのに値だけ256ということになりかねない
terminal emulator(あるいはmultiplexer)やvimが256色対応しているか調べる方法
この記事を参照。
256colors2.plがリンク切れなのでこちらから。