
我需要$TERM
位於xterm-256color
tmux 之外(在帶有 zsh 的“普通”終端中),但screen-256color
在 tmux 內。
首先我嘗試:
- 添加
export TERM='xterm-256color'
到我的~/.zshrc
. - 添加
set -g default-terminal "screen-256color"
到我的~/.tmux.conf
現在,當我打開終端(例如 xterm)時,TERM
是xterm-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
。
那麼,如何才能在「普通」終端機和tmux 中TERM
呢?xterm-256color
screen-256color
答案1
TERM 環境變數應由充當終端的應用程式設定。這就是事情的全部要點:讓在其中運行的程式知道正在使用什麼終端,從而知道它支援什麼類型的功能。
Zsh 不是終端機。它是一個外殼。如果它想做特殊的事情,它可能會關心你的 TERM 設定為什麼,但它不應該負責環境它。相反,它負責設定 ZSH_VERSION 等變量,腳本或其他子進程可以使用這些變量來了解其父 shell 期望的行為。
相反,您需要檢查您正在使用的任何終端應用程式的配置,並要求它正確報告自身。例如,您可以透過將此行新增至~/.Xdefaults
用於設定值的檔案來為 xterm 執行此操作:
xterm*termName: xterm-256color
看起來 gnome-terminal 做了一件愚蠢的事情:讀取你的 xterm 配置,而不是擁有它自己的配置。在某些情況下,這可能會幫助您,但應該更正確地設定為 vte-256color。這似乎是對其(以及其他一些基於 VTE 的終端模擬器)的長期抱怨。 A一般的方法解決這個問題是利用它設定的另一個值:
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
對於其他終端,您將需要尋找其正確的設定例程。
答案2
在你的 .zshrc 中,放入
[[ -n $TMUX ]] && export TERM="xterm-256color"
並且,在你的 .tmux.conf 中
set -g default-terminal "screen-256color"