![tmux 在 256 色終端上輸出 256 色,在 8 色終端上輸出 8 色](https://rvso.com/image/164713/tmux%20%E5%9C%A8%20256%20%E8%89%B2%E7%B5%82%E7%AB%AF%E4%B8%8A%E8%BC%B8%E5%87%BA%20256%20%E8%89%B2%EF%BC%8C%E5%9C%A8%208%20%E8%89%B2%E7%B5%82%E7%AB%AF%E4%B8%8A%E8%BC%B8%E5%87%BA%208%20%E8%89%B2.png)
我想要tmux
自動選擇256色模式,也就是有環境變量
TERM=tmux-256color
裡面 tmux
當環境變數
TERM=xterm-256color
已設定外部。
預設行為
256色終端機模擬器
目前的行為是tmux
在任何情況下都選擇 8 色模式:使用支援 256 色的終端模擬器,即 Gnome Terminal 或 xterm,並確保它支援 256 色
echo $TERM; tput colors
# xterm-256colors
# 256
然後開始tmux
。預設tmux
會切換到 8 種顏色:
echo $TERM; tput colors
# screen
# 8
8色終端仿真器
如果您切換到 8 色終端,即/dev/tty2
按 Ctrl+Alt+F2 切換到,您將得到
echo $TERM; tput colors
# linux
# 8
和裡面tmux
一樣舊
echo $TERM; tput colors
# screen
# 8
強制 256 色模式
我可以強制tmux
選擇256色模式透過添加以下內容~/.tmux.conf
set -s default-terminal "tmux-256color"
然而,這也適用於如果外部終端仿真器一開始就不支援256色。這不是我想要的。
自適應256色模式
有一個問題和一個常問問題在 GitHub 上,聲明設定其中之一(人們報告相互矛盾的參數)
set -ga terminal-overrides ",xterm-256color*:Tc"
set -sa terminal-overrides ",xterm-256color*:Tc"
set -ga terminal-overrides ",*256col*:Tc"
set -sa terminal-overrides ",*256col*:Tc"
應該tmux
選擇終端的顏色模式,但它們都不適用於我的安裝(Arch 上的 tmux 3.0)。
是否有明確的方法可以tmux
根據目前終端模擬器支援的顏色來選擇 8 種顏色或 256 種顏色?
答案1
這並不是 tmux 本身可以完全為您做的事情,因為它無法更改已經運行的程式上的 TERM,例如,如果您從帶有 xterm-256color 的終端分離並重新連接到具有 xterm 的終端。
不過,您可以自己做。客戶端的術語以 client_termname 格式提供。因此,您可以將類似的內容放入 PS1 或 .profile 或其他內容中:
if [ -n "$TMUX" ]; then
T=$(tmux display -p '#{client_termname}')
case "$T" in
*-256color)
export TERM=tmux-256color
;;
*)
export TERM=tmux
;;
esac
fi
顯然,如果您在未附加的會話中建立窗格(client_termname 將為空),則預設為 tmux;如果您有一個會話附加到多個用戶端,則預設為最近使用的用戶端中的 TERM。
如果您不想像這樣在 shell 中執行此操作,則可以使用用戶端附加掛鉤來變更預設終端 - 但這僅適用於新窗格,而不適用於現有窗格。
另一種選擇是始終使用 tmux-256color 運行,並在外部終端無法執行 256 色時讓 tmux 將顏色向下轉換。
關於 Tc 的常見問題解答中的所有內容都是關於 RGB 顏色(真彩色),而不是您所詢問的內容。