GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zsh:Setze Term=screen-256color in Tmux, aber Xterm-256color ohne Tmux?

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?
Linux
  1. Welche Terminal-Emulatoren unterstützen den Tmux-Steuerungsmodus?

  2. Vim läuft nicht in Tmux?

  3. Befehl nicht in Zsh, aber in Bash gefunden?

  4. So legen Sie den Hostnamen in Ubuntu ohne Neustart dauerhaft fest

  5. So legen Sie Proxy-Einstellungen in der Linux-Befehlszeile oder im Terminal fest

Anpassen meines Linux-Terminals mit tmux und Git

Wie tmux Freude in Ihrem Linux-Terminal macht

Tmux, Term und 256-Farben-Unterstützung?

Verwenden von Umgebungsvariablen in Tmux.conf-Dateien?

Abschluss abbrechen, aber nur Abschluss, in Zsh?

Bash-Verlauf ohne Zeilennummern