
Ich muss mich außerhalb von tmux $TERM
befinden xterm-256color
(im „einfachen“ Terminal mit zsh), aber screen-256color
innerhalb von tmux.
Zuerst habe ich versucht:
- hinzufügen
export TERM='xterm-256color'
zu meiner~/.zshrc
. - hinzufügen
set -g default-terminal "screen-256color"
zu meiner~/.tmux.conf
Wenn ich jetzt ein Terminal öffne (z. B. xterm), TERM
ist xterm-256color
, was richtig ist. Aber wenn ich tmux ausführe, TERM
ist wieder xterm-256color
!
Dann habe ich versucht, die Zeile in meinem auszukommentieren ~/.zshrc
. Wenn ich jetzt das Terminal öffne, TERM
ist xterm
, und wenn ich tmux ausführe, TERM
ist screen-256color
. Es scheint also, dass, wenn ich TERM
in einstelle .zshrc
, tmux zuerst auf setzt TERM
, screen-256color
die Shell (das ist zsh) ausführt und zsh liest .zshrc
und TERM
auf zurücksetzt xterm-256color
.
TERM
Wie gelangt man also xterm-256color
in ein „normales“ Terminal und screen-256color
in tmux?
Antwort1
Die Umgebungsvariable TERM sollte von der Anwendung festgelegt werden, die als Ihr Terminal fungiert. Das ist der Sinn der Sache: Die darin ausgeführten Programme wissen zu lassen, welches Terminal verwendet wird und welche Funktionen es somit unterstützt.
Zsh ist kein Terminal. Es ist eine Shell. Es kann sich darum kümmern, auf was Ihr TERM eingestellt ist, wenn es spezielle Dinge tun will, aber es sollte nicht verantwortlich sein fürEinstellunges. Stattdessen ist es für das Setzen von Variablen wie ZSH_VERSION verantwortlich, die von Skripten oder anderen untergeordneten Prozessen verwendet werden können, um zu verstehen, welches Verhalten von der übergeordneten Shell zu erwarten ist.
Stattdessen müssen Sie die Konfiguration der von Ihnen verwendeten Terminalanwendung überprüfen und sie bitten, sich selbst richtig zu melden. Sie können dies beispielsweise für xterm tun, indem Sie diese Zeile zu der ~/.Xdefaults
Datei hinzufügen, die es für Konfigurationseinstellungen verwendet:
xterm*termName: xterm-256color
Es scheint, dass Gnome-Terminal die idiotische Sache macht, Ihre Xterm-Konfiguration zu lesen, anstatt eine eigene zu haben. Dies könnte in einigen Fällen helfen, aber es sollte besser auf vte-256color eingestellt werden. Dies scheint ein seit langem bestehender Kritikpunkt an Gnome-Terminal (und einigen anderen VTE-basierten Terminalemulatoren) zu sein. Einnormalerweiseum dies zu umgehen, muss man einen anderen Wert ausnutzen, den es festlegt:
if [ "$COLORTERM" = "gnome-terminal" ]; then
export TERM=vte-256color
fi
Damit sind Sie aber wieder bei Ihrem Problem mit tmux, also müssen Sie das berücksichtigen, indem Sie TERM nicht zurücksetzen, wenn es bereits so etwas wie „screen-256color“ oder „screen“ ist:
if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
export TERM=vte-256color
fi
Für andere Terminals müssen Sie die entsprechenden Konfigurationsroutinen nachschlagen.
Antwort2
Fügen Sie in Ihre .zshrc ein
[[ -n $TMUX ]] && export TERM="xterm-256color"
Und in Ihrer .tmux.conf
set -g default-terminal "screen-256color"