我有一堆點文件,可以讓我在終端機上有一個漂亮的主題,在本地主機上有 tmux。我使用 kitty、fish 和 tmux。為了正確定義顏色並具有全域一致性,我使用以下文件:
- .X資源
- 小貓設定檔
- 魚_提示.fish
- .tmux.conf
我還有一個遠端伺服器,它運行相同的 arch + Fish + tmux 並使用完全相同的點檔案。然而,當透過 SSH 連接到伺服器時,一切看起來完全不同:
我在谷歌上搜尋了一下,有很多教程告訴你添加一堆奇怪的配置,但沒有一個真正解釋幕後到底發生了什麼(而且,正如你所看到的,它們都不起作用)。
這是我試圖讓它發揮作用的方法(沒有真正理解為什麼):
- 加到 tmux.conf :
set^[[3m -g default-terminal "xterm-kitty"
set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
- 新增了 xterm-kitty terminfo 文件
TERM
登入時將環境變數改為xterm-kitty
我希望有一些資源來指出這一切是如何運作的!謝謝!
編輯 :
TERM
為了清楚起見,以下是我擁有的價值:
- 在本機上:
xterm-kitty
- 在 tmux 內的本機上:
xterm-256color
- 開啟 ssh 後直接在遠端主機上:
xterm-kitty
- 在 tmux 中的遠端主機上:
xterm-256color
所有檔案均使用 git 儲存庫同步,所有版本均相同。我已經傳輸了terminfo
與以下內容相關的相同文件xterm-kitty
在兩台主機上。另外,使用這在腳本中,我可以看到所有顏色都正確顯示並且在兩台主機上都相同。
我還注意到,在沒有 tmux 的情況下登入遠端電腦會產生另一種顏色組合(到處使用相同的魚設定檔):
答案1
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
。
答案2
如果您在本機上使用 tmux,然後執行 ssh 到遠端計算機,則遠端會話無法告訴您可以使用 RGB 顏色來代替(或補充)索引顏色 (256 -顏色)。這是因為 tmux“Tc”覆蓋對遠端會話不可見。
您可以透過修改對應的終端描述來解決此問題預設終端tmux 的設置,例如,添加您使用的任何設置終端覆蓋到終端描述的文字文件,並使用tic
編譯它(在每台機器上)。例如(如果預設終端是tmux
):
infocmp -x tmux >foo
printf '\tTc,\n' >>foo
tic -x foo
還有幾點要考慮:
複製創建的二進位文件
tic
不可靠(出於不只一個原因)。如果遠端有相同的終端描述,假設遠端應用程式使用終端描述,您將獲得(更)一致的行為內容而不是姓名終端描述。
答案3
設法修復它!這是給出的所有答案的組合,還有一個重要的額外變數。
所需步驟:
- 確保
TERM
每個主機上和每個 tmux 內使用的變數都相同(我最終xterm-kitty
直接在主機上使用並且tlux-256color
TMUX 會話內使用)。感謝尼古拉斯·馬裡奧特。 - 添加
Tc;
到我使用的終端的 infocmp,使用此片段由托馬斯·迪基提供:
infocmp -x tmux-256color >foo
printf '\tTc,\n' >>foo
tic -x foo
- 添加
set -g fish_term24bit 1
到我的 config.fish 以強制魚使用真彩色模式。