zsh:在 tmux 中設置 TERM=screen-256color,但在沒有 tmux 的情況下設置 xterm-256color
我需要我
$TERM
在xterm-256color
tmux 之外(在帶有 zsh 的“普通”終端中),但screen-256color
在 tmux 之內。首先我試過:
- 添加
export TERM='xterm-256color'
到我的~/.zshrc
.- 添加
set -g default-terminal "screen-256color"
到我的~/.tmux.conf
現在,當我打開終端(比如 xterm)時,
TERM
isxterm-256color
是正確的。但是當我執行 tmux 時,TERM
又是xterm-256color
!然後我嘗試在我的
~/.zshrc
. 現在,當我打開終端時,TERM
是xterm
,當我執行 tmux 時,TERM
是screen-256color
。因此,如果我TERM
在 中設置.zshrc
,tmux 首先設置TERM
為screen-256color
,執行 shell(即 zsh),然後 zsh 讀取.zshrc
並重置TERM
為xterm-256color
.那麼,如何
TERM
在xterm-256color
“普通”終端和screen-256color
tmux 中使用呢?
TERM 環境變數應由充當終端的應用程序設置。這就是事情的全部意義:讓在其中執行的程序知道正在使用的終端以及它支持的功能類型。
Zsh 不是終端。它是一個貝殼。如果它想做特殊的事情,它可能會關心你的 TERM 設置是什麼,但它不應該負責設置它。相反,它負責設置諸如 ZSH_VERSION 之類的變數,腳本或其他子程序可以使用這些變數來了解其父 shell 的預期行為。
相反,您需要檢查您正在使用的任何終端應用程序的配置,並要求它正確報告自己。例如,您可以通過將此行添加到
~/.Xdefaults
它用於配置值的文件中來為 xterm 執行此操作:xterm*termName: xterm-256color
似乎 gnome-terminal 做了一件愚蠢的事情,即閱讀您的 xterm 配置而不是擁有它自己的配置。在某些情況下,這可能會讓您順利通過,但應該更正確地將其設置為 vte-256color。這似乎是對它(以及其他一些基於 VTE 的終端仿真器)的長期抱怨。解決此問題的一種常見方法是利用它設置的另一個值:
if [ "$COLORTERM" = "gnome-terminal" ]; then export TERM=vte-256color fi
但這會讓你回到 tmux 的問題上,所以如果它已經是“screen-256color”或“screen”之類的東西,你必須通過不重置 TERM 來解決這個問題:
if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then export TERM=vte-256color fi
對於其他終端,您需要查找其正確的配置常式。