TMUX和終端顏色在本地和ssh上不一樣
我有一堆點文件,可以讓我在我的終端上擁有一個漂亮的主題,在我的本地主機上擁有 tmux。我使用小貓、魚和 tmux。為了正確定義顏色並具有全域一致性,我使用以下文件:
- .X 資源
- 小貓.conf
- fish_prompt.fish
- .tmux.conf
我還有一個遠端伺服器,它執行相同的 arch + fish + tmux 並使用完全相同的點文件。然而,當 SSH-ing 進入伺服器時,一切看起來完全不同:
我有Google,有很多教程告訴你添加一堆奇怪的配置,但沒有一個真正解釋引擎蓋下真正發生的事情(而且,如你所見,它們都沒有工作)。
這是我試圖做的事情(沒有真正理解為什麼):
- 添加到 tmux.conf :
set^[[3m -g default-terminal "xterm-kitty" set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
- 添加了 xterm-kitty terminfo 文件
- 登錄時將 env 變數更改
TERM
為 xterm-kitty我很想有一些資源來指出這一切是如何運作的!謝謝!
編輯 :
為清楚起見,以下是
TERM
I have 的值:
- 在本地主機上:
xterm-kitty
- 在 tmux 內的本地主機上:
xterm-256color
- 打開 ssh 後直接在遠端主機上:
xterm-kitty
- 在 tmux 的遠端主機上:
xterm-256color
所有文件都使用 git repo 同步,所有版本都是相同的。我已經在兩台主機上傳輸了相同的
terminfo
文件。xterm-kitty
此外,使用此腳本,我可以看到所有顏色在兩台主機上都正確顯示並且相同。我還注意到在沒有 tmux 的情況下登錄遠端機器會產生另一種顏色組合(到處都使用相同的魚配置文件):
default-terminal``TERM
在 tmux 中設置預設值。不要將此設置為xterm-kitty
- tmux 不是 xterm 或 kitty。tmux-256color
如果它存在於您的電腦上,請將其設置為(選中)infocmp tmux-256color
,否則設置為screen-256color
.同樣,不要
TERM
在 shell 配置文件中為所有終端設置相同的內容。您所擁有的
terminal-overrides
行告訴 tmux,當它看到TERM
設置為xterm-kitty
它意味著終端支持真(RGB)顏色(因此Tc
)。
TERM
inside tmux 告訴 tmux 內部的程序它們正在與 (tmux) 對話。TERM
tmux 外部告訴 tmux 它正在與什麼對話(在本例中為 kitty)。如果它在本地工作但不能通過 ssh 工作,那麼最可能的情況是:
- 不同
TERM
的外部 tmux。您確定echo $TERM
在本地電腦和 ssh 上啟動 tmux 之前立即顯示相同的內容嗎?- tmux 配置實際上並不相同,您確定它們是相同的嗎?如果你需要
terminal-overrides
在一個地方,你會在另一個地方需要它,如果沒有,那麼你就不需要。- 您確定
xterm-kitty
在兩台電腦上都存在並且相同嗎?檢查infocmp xterm-kitty
。- 不同的 tmux 版本。你確定它們是一樣的嗎?檢查
tmux -V
。
如果您在本地機器上使用 tmux,然後執行 ssh 到遠端機器,遠端會話無法判斷您可以使用 RGB 顏色代替(或除)索引(256 -顏色)。這是因為遠端會話看不到 tmux “Tc” 覆蓋。
您可以通過修改與tmux的預設終端設置相對應的終端描述來解決此問題,例如,通過將與**終端覆蓋一起使用的任何設置添加到終端描述的文本文件中,並使用**
tic
它來編譯它(在每台機器)。例如(如果預設終端是tmux
**):infocmp -x tmux >foo printf '\tTc,\n' >>foo tic -x foo
還有幾點需要考慮:
- 複製由創建的二進製文件**
tic
**是不可靠的(原因不止一個)。- 如果在遠端端有相同的終端描述,您將獲得(更)一致的行為,假設遠端應用程序使用終端描述內容而不是終端描述的名稱。