zsh: setze TERM=screen-256color in tmux, aber xterm-256color ohne tmux

zsh: setze TERM=screen-256color in tmux, aber xterm-256color ohne tmux

Ich muss mich außerhalb von tmux $TERMbefinden xterm-256color(im „einfachen“ Terminal mit zsh), aber screen-256colorinnerhalb 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), TERMist xterm-256color, was richtig ist. Aber wenn ich tmux ausführe, TERMist wieder xterm-256color!

Dann habe ich versucht, die Zeile in meinem auszukommentieren ~/.zshrc. Wenn ich jetzt das Terminal öffne, TERMist xterm, und wenn ich tmux ausführe, TERMist screen-256color. Es scheint also, dass, wenn ich TERMin einstelle .zshrc, tmux zuerst auf setzt TERM, screen-256colordie Shell (das ist zsh) ausführt und zsh liest .zshrcund TERMauf zurücksetzt xterm-256color.

TERMWie gelangt man also xterm-256colorin ein „normales“ Terminal und screen-256colorin 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 ~/.XdefaultsDatei 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"

verwandte Informationen