Ich brauche mein $TERM
muss xterm-256color
sein außerhalb von tmux (im „einfachen“ Terminal mit zsh), aber screen-256color
innerhalb von tmux.
Zuerst habe ich versucht:
- füge
export TERM='xterm-256color'
hinzu zu meinem~/.zshrc
. - add
set -g default-terminal "screen-256color"
zu meiner~/.tmux.conf
Wenn ich jetzt das Terminal öffne (z. B. xterm), TERM
ist xterm-256color
, welches ist richtig. Aber wenn ich tmux starte, TERM
ist wieder xterm-256color
!
Dann habe ich versucht, die Zeile in meinem ~/.zshrc
auszukommentieren . Wenn ich jetzt das Terminal öffne, TERM
ist xterm
, und wenn ich tmux ausführe, TERM
ist screen-256color
. So scheint es, wenn ich TERM
setze in der .zshrc
, tmux setzt zuerst TERM
zu screen-256color
, führt Shell (das ist zsh) aus und zsh liest .zshrc
und setzt TERM
zurück zu xterm-256color
.
Also, wie man TERM
macht muss xterm-256color
sein im „einfachen“ Terminal und screen-256color
im tmux?
Akzeptierte Antwort:
Die Umgebungsvariable TERM sollte von der Anwendung gesetzt werden, die als Ihr Terminal fungiert. Das ist der ganze Sinn der Sache:Programme, die in ihnen laufen, wissen zu lassen, welches Terminal verwendet wird und daher welche Art von Funktionen es unterstützt.
Zsh ist kein Terminal. Es ist eine Hülle. Es könnte wichtig sein, auf was Ihr TERM eingestellt ist, wenn es bestimmte Dinge tun möchte, aber es sollte nicht für die Einstellung verantwortlich sein es. 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 ihrer übergeordneten Shell zu erwarten ist.
Stattdessen müssen Sie die Konfiguration für die von Ihnen verwendete Terminalanwendung überprüfen und sie bitten, sich ordnungsgemäß zu melden. Beispielsweise können Sie dies für xterm tun, indem Sie diese Zeile zu ~/.Xdefaults
hinzufügen Datei, die es für Konfigurationswerte verwendet:
xterm*termName: xterm-256color
Es scheint, dass gnome-terminal die idiotische Sache macht, zu lesen, was Ihre xterm-Konfiguration wäre, anstatt eine eigene zu haben. Dies kann in einigen Fällen hilfreich sein, sollte jedoch besser auf gnome-256color eingestellt werden. Dies scheint seit langem ein Kritikpunkt zu sein (und gegen einige andere VTE-basierte Terminalemulatoren). Eine gängige Methode, dies zu umgehen, besteht darin, einen anderen Wert auszunutzen, den es festlegt:
if [ "$COLORTERM" = "gnome-terminal" ]; then
export TERM=gnome-256color
fi
Aber das bringt Sie zurück zu Ihrem Problem mit tmux, also müssten 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=gnome-256color
fi
Für andere Terminals müssen Sie die entsprechenden Konfigurationsroutinen nachschlagen.
Siehe auch:Wie bringt man Safari dazu, kMDItemWhereFroms festzulegen, wenn „Bild in Downloads speichern“ verwendet wird?