tmux、TERM 和 256 色支持
介紹
我的問題源於理解為什麼我現在(經過多次試驗)終端和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
(source)。Guake 的行為類似於Terminal並且他們都回答
xterm
了這個問題echo $TERM
。問題
基本上,有沒有人明白為什麼一切正常,即使它不應該?
- 我抱怨為什麼事情有效,我是虐待狂嗎?也許。
- 有更好的理由嗎?當然:我想修復我辦公室中其他 Ubuntu 盒子的外觀,我想了解為什麼這些東西可以正常工作或不正常。
額外的實驗
在 my 上執行此腳本(稍作修改)
xterm
提供以下結果:256 種顏色,但只有 16 種正確顯示。然後,改變終端的配置文件,這 16 種顏色也會改變。
更多測試如下。
從左到右,從上到下,我們有Solarized顏色主題,
dircolor
ansi-dark
然後256dark
是預設 ( Tango ) 配色方案,dircolor
ansi-dark
然後是256dark
.觀察:理論上來說
dircolor
ansi-dark
,Solarized配色方案應該已經很匹配了dircolor
256dark
。對於特定列出的文件,這並沒有明顯發生。相反,當工作目錄中有文件夾、文本文件和符號連結時,就會發生這種情況。結論256dark
:在編碼顏色時沒有給予太多關注。初步結論
xterm
支持 256 種顏色,不管怎麼說tput colors
。程序可以參考ansi
調色板(可由使用者自定義)或定義它們的顏色,從總共 256 種顏色中挑選。
tmux FAQ中有一些關於 256 色支持的資訊。
不幸的是,由於歷史原因,檢測終端支持的顏色數量並不簡單。有關說明,請參閱檢查我的終端仿真器支持多少種顏色。這意味著
- tmux 無法可靠判斷終端是否支持超過 8 種顏色;
- tmux 無法可靠地與應用程序通信它支持超過 8 種顏色。
當您在 tmux 中時,您正在與之互動的終端是 tmux。它不支持所有 xterm 的控制序列。特別是,它不支持
OSC 4 ; …
查詢或設置顏色值的控制序列。您需要在 tmux 之外的 xterm 中直接執行時使用它。如果您執行
tmux -2
,則 tmux 以 256 色支持開始,即使它認為您的終端不支持 256 色(這很常見)。預設情況下,tmux 宣傳自己
screen
不支持 256 色。您可以更改 in 的值TERM
以.tmux.conf
指示 256 色支持:set -g default-terminal "screen-256color"
您可以在 Ubuntu 上使用
TERM=xterm-256color
或。TERM=screen-256color
如果您登錄到沒有這些名稱的 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/