はじめに
私の質問は、理由を理解する必要性から生じています。 今 (複数回の試行後)ターミナル およびtmux 256色とtput colorsをサポート たった8つしかないと言っています。
背景
最初から始めましょう。
Ubuntuを使用しています ボックス、 Guake 、 tmux 、 Vim テーマSolarizedが大好きです 。彼らはかなりひどい見た目だったので、私は256色のサポートを有効にして少し遊んでみることにしました。
ターミナルで何が起こるか見てみましょう 。 tput colors 8色あると言います。私は個人的にそれらを左側の紫色に設定しました。もちろん 右側には、2つの異なる青の色合いがあります。 $TERM xtermと言います 。 (色付きのls 私はeval これは私の.bashrcにあります 。)
Vim 256で呼んでいるにも関わらず、見た目も問題ありません。 256色がない環境でフラグを立てる サポートされています。
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
色空間の減少について不満を言うのはtmuxだけです。 。 tmuxを呼び出す 「間違った」期待される結果を提供します。
ただし、tmuxを呼び出す -2で フラグを使用すると、すべてが正常に機能します。魔法のように 。
今私が理解しているのは、-2だけです。 export TERM=screen-256colorと同等です (出典)。
グアケ ターミナルと同様に動作します どちらもxtermに答えます 質問echo $TERM 。
質問
基本的に、機能しない場合でもすべてが機能する理由を誰かが理解していますか?
- 私は物事がうまくいく理由を不平を言っているのはサディスティックですか?多分。
- もっと良い理由はありますか?確かに:オフィスの他のUbuntuボックスの外観を修正したいのですが、物事が機能する理由と機能しない理由を理解したいと思います。
追加の実験
このスクリプト(わずかに変更)をxtermで実行する 次の結果が得られます:256色ですが、正しく表示されるのは16色のみです。
次に、端末のプロファイルを変更すると、これらの16色も変更されます。
さらにテストが続きます。
左から右へ、上から下へ、ソラライズド カラーテーマ、dircolor ansi-dark および256dark 、次にデフォルト( Tango )配色、dircolor ansi-dark および256dark 。
観察 :理論的にはdircolor ansi-dark ソラライズド 配色はdircolorと厳密に一致している必要があります 256dark 。これは、リストされている特定のファイルでは明確に発生していません。代わりに、これは、作業ディレクトリにフォルダがある場合に発生します。 、テキストファイル およびシンボリックリンク 。 結論 :256darkのエンコード中にはあまり注意が払われていません 色。
予備的な結論
xterm tput colorsにかかわらず、256色をサポートします 言う。プログラムはansiを参照できます パレット(ユーザーがカスタマイズ可能)または色を定義し、合計256色から選択します。
承認された回答:
tmuxFAQに256色のサポートに関する情報があります。
関連:ローカル変数を定義するための `local`キーワードをサポートするシェルのリスト?歴史的な理由から、端末がサポートする色の数を検出することは、残念ながら簡単ではありません。説明については、ターミナルエミュレータがサポートする色の確認を参照してください。つまり、
- tmuxは端末が8色以上をサポートしているかどうかを確実に判断できません;
- tmuxは、8色以上をサポートしていることをアプリケーションと確実に通信できません。
tmuxを使用している場合、操作している端末はtmuxです。 xtermのすべての制御シーケンスをサポートしているわけではありません。特に、OSC 4 ; … 色の値を照会または設定するための制御シーケンス。 tmuxの外部でxtermで直接実行しているときに使用する必要があります。
tmux -2を実行した場合 、その後、端末が256色をサポートしているとは思わない場合でも、tmuxは256色のサポートから始まります(これはかなり一般的です)。
デフォルトでは、tmuxは自分自身をscreenとしてアドバタイズします 256色のサポートなし。 TERMの値を変更できます .tmux.conf内 256色のサポートを示すには:
set -g default-terminal "screen-256color"
TERM=xterm-256colorを使用できます またはTERM=screen-256color Ubuntuで。これらの値は、これらの名前のtermcap/terminfoエントリがないリモートマシンにログインした場合にのみ問題を引き起こします。エントリをリモートマシンのホームディレクトリにコピーできます。これは最新のterminfo実装で機能します。
# From the Ubuntu machine to a machine that doesn't have *-256color terminfo entries
ssh somewhere.example.com mkdir -p .terminfo/s .terminfo/x
scp -p /lib/terminfo/s/screen-256color somewhere.example.com:.terminfo/s/
scp -p /lib/terminfo/x/xterm-256color somewhere.example.com:.terminfo/x/