LinuxにおけるターミナルのTrueColorについて
ターミナルでのTrueColor表示について
ターミナルでtruecolor表示するには、Vim、tmux、シェル、ターミナル全てで対応しなければならないらしい。
そこで、どのような設定、対応をすればよいか調べてみる。
現在の対応状況の確認
まずは、以下のコマンドで確認してみる。
$ curl -s https://gist.githubusercontent.com/lifepillar/09a44b8cf0f9397465614e622979107f/raw/24-bit-color.sh | bash
表示色に継ぎ目がなければOKだが、色がブロック状になっていたら非対応。
NeoVimのカラースキーム表示でもTrueColor対応できているか確認することができる。
ターミナルカラー
端末のカラー表示には2種類ある。
TrueColor
- RGBそれぞれ8ビットを用いて表現します。24ビットカラー(#000000)
- RGBAさらに透明度8ビットを合わせた32ビットカラー。(#000000ff:最後の2bitで透明度)
8-bit color
- 256色
- 1~256までの数字表す。”RED”,”Yellow”,"WHITE"など、xtermやscreenなどはそれぞれで色の割り当てが異なる。
対応方法
それぞれの対応方法は以下の通り。
- ターミナル:
- 対応したものを使用
- シェル(bash/zsh:)
- 特に設定の必要はないが、使用ターミナルによっては環境変数の指定が必要かも。
- tmux:
- terminal-overridesとdefault-terminalを適切に設定
- Vim:
- termguicolorsを有効にする
上位(小さい数字)の対応ができていないと、それ以下はtrue colorで表示できない。
ターミナル(ターミナルエミュレータ)
ターミナルはtrue colorに対応している端末を利用する。
- rxvtは非対応なので、turucolor対応のパッチを充てるか、すでにパッチを充ててあるものをインストールする。
True Colour (16 million colours) support in various terminal applications and terminals · GitHub
上記サイトにて、ターミナルの対応状況の確認ができる。
bash/zsh
TrueColorには環境変数TERMの値が関わってくるので、適宜設定する。
インストールする端末等で設定できる。
$TERMについての補足。
$TERMは、sshクライアント側の$TERMがそのままsshサーバーの$TERMになる。もしクライアントがtmuxを起動していた場合、tmuxのdefault-terminalの値がサーバー側の$TERMになる。
シェルの設定(bashrc,zshrc等)で
alias ssh="env TERM=xterm-256color ssh"
のように設定しておけば、ここで指定した値がサーバー側の$TERMになる。
SSH先の設定をする場合は注意!。
tmux
tmuxは基本的に以下をそのままtmux.confへ加えればOK。
set-option -g default-terminal "tmux-256color" # 基本的にはscreen-256colorかtmux-256colorを設定
set-option -ga terminal-overrides ",$TERM:Tc" # tmuxを起動していない時のzshでの$TERMの値を指定
解説
terminal-overrides
- これにはtmuxを起動していない状態のzshの$TERMの値を設定。ここを間違えているとTrueColor表示できなくなります。
default-terminal
- これに設定した値がtmuxを起動した状態のzshの$TERMの値です。
基本的にdefault-terminalはtmux-256color(推奨値)に設定しておけば良い。
もし、
/usr/share/terminfoにtmux-256color
がない場合は、以下の対応をする必要がある。
- ncurses-tmuxをインストール
- tic tmux-256color.terminfoを実行してtmux-256colorの設定を生成(後述)
- ticを使う場合は以下のコマンドで。
$ curl -sL https://raw.githubusercontent.com/jez/dotfiles/master/tmux-256color.terminfo | tic -
How to actually get italics and true colour to work in iTerm + tmux + vim
- default-terminalをscreen-256colorあるいはxterm-256colorに設定
vim
Vimは以下の内容を起動ファイル(vimrc,initvim等)に記入。
set termguicolors
" $TERMがxterm以外のときは以下を設定する必要がある。
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" " 文字色
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" " 背景色
これを貼ればOK。
参考サイト
“Italic fonts in iTerm2, tmux, and vim" by Alex Pearce
Unix & Linux by Stack Exchange
term – Vim日本語ドキュメント
tmux 上で Vim を True Color (24 bit color) で使う – Qiita
TrueColor対応のはなし(端末、シェル、tmux、vim)
最近のコメント