Ich brauche meine $TERM
sein xterm-256color
außerhalb von tmux (in „plain“ Terminal mit zsh), aber screen-256color
innerhalb tmux.
Zuerst habe ich versucht:
- hinzufügen
export TERM='xterm-256color'
zu meinem~/.zshrc
. - hinzufügen
set -g default-terminal "screen-256color"
zu meinem~/.tmux.conf
Nun, wenn ich Terminal öffne (sprich xterm), TERM
istxterm-256color
das richtig. Aber wenn ich tmux laufen lasse, TERM
geht das wieder xterm-256color
!
Dann habe ich versucht, die Zeile in meinem zu kommentieren ~/.zshrc
. Jetzt, wenn ich das Terminal öffne, TERM
ist xterm
und wenn ich tmux starte, TERM
ist screen-256color
. So scheint es , wenn ich gesetzt TERM
in die .zshrc
, tmux zunächst Sätze TERM
zu screen-256color
, Shell läuft (die zsh), und zsh liest.zshrc
und setzt TERM
auf xterm-256color
.
Also, wie macht TERM
man es sich xterm-256color
im " screen-256color
normalen " Terminal und im tmux?
TERM
in diesen Terminals kann ich immer noch keine korrekten Einstellungen vornehmengnome-terminal
sollte das wahrscheinlich seingnome-256color
... Es sind also die Anwendungen, die Sie richtig konfigurieren müssen, nichtzsh
. Der Grund, den sie verwenden,xterm
ist wahrscheinlich, um Probleme beim Versenden an Computer zu vermeiden, die nicht die spezifischeren terminfo-Einträge haben. Wenn Sie wissen, dass Sie nur auf Computer mit einer umfassenden Terminfo-Datenbank zugreifen, können und sollten Sie dies in den Anwendungen selbst ändern.xterm
xterm-256color zu ersetzen , obwohl es sogar besser wäre, diese Einträge in unserem hinzuzufügen eigene ~ / .terminfo Datenbank)..zshrc
. Es ist nicht der richtige Weg.Antworten:
Die Umgebungsvariable TERM sollte von der Anwendung festgelegt werden, die als Ihr Terminal fungiert. Das ist der springende Punkt: Lassen Sie Programme, die in ihnen ausgeführt werden, wissen, welches Terminal verwendet wird und welche Art von Funktionen es unterstützt.
Zsh ist kein Terminal. Es ist eine Muschel. Es kann von Bedeutung sein, auf was Ihr TERM eingestellt ist, wenn Sie spezielle Aufgaben ausführen möchten, es sollte jedoch nicht für die Einstellung verantwortlich sein sein. Stattdessen ist es dafür verantwortlich, Variablen wie ZSH_VERSION festzulegen, 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 für die von Ihnen verwendete Terminalanwendung überprüfen und sie auffordern, sich selbst ordnungsgemäß zu melden. Sie können dies beispielsweise für xterm tun, indem Sie diese Zeile zu der
~/.Xdefaults
Datei hinzufügen, die für Konfigurationswerte verwendet wird:Es sieht so aus, als ob gnome-terminal die idiotische Sache macht, zu lesen, wie Ihre xterm-Konfiguration aussehen würde, anstatt eine eigene zu haben. Dies kann in einigen Fällen von Vorteil sein, sollte aber besser auf gnome-256color eingestellt sein. Dies scheint ein langjähriger Kritikpunkt zu sein (und einige andere VTE-basierte Terminalemulatoren). Ein üblicher Weg, dies zu umgehen, ist es, einen anderen Wert zu nutzen, den es festlegt:
Damit kehren Sie zu Ihrem Problem mit tmux zurück. Sie müssten dies berücksichtigen, indem Sie TERM nicht zurücksetzen, wenn es sich bereits um "screen-256color" oder "screen" handelt:
Für andere Terminals müssen Sie die entsprechenden Konfigurationsroutinen nachschlagen.
quelle
zsh
ist nicht verantwortlich für die Einstellung$SHELL
.login
ist für die Einstellung verantwortlich, und Sie sind dafür verantwortlich, dies in etwas anderes zu ändern, wenn Sie Anwendungen mitteilen möchten (xterm
,vi
...), welche Shell Sie als bevorzugte Shell verwenden möchten.zsh
ist verantwortlich für das Setzen$ZSH_VERSION
und einige dokumentierte spezielle Shell-Variablen, aber es berührt nicht$SHELL
.konsole
TERM eingestellt ist, anstatt es in meinen bashrc zu schreiben. Found it set Registerkarte in der General Profil, Umwelt, änderte sie sich vonxterm
zuxterm-256color
truecolor
anstelle vongnome-terminal
for installiert werden$COLORTERM
und daher der oben genannte Erkennungsmechanismus möglicherweise nicht funktioniert. XTERM scheint diesen Wert überhaupt nicht festzulegen. Möglicherweise ist es gültig, nach einem Wert zu suchen. Dieser Begriffstyp wird in dieser Zusammenfassung teilweise an anderer Stelle behandelt: gist.github.com/XVilka/8346728#true-color-detectionSetzen Sie in Ihre .zshrc
Und in Ihrer .tmux.conf
quelle
[[ $TMUX != "" ]] && export TERM="screen-256color"
diese Weise setzt zsh TERM nur, wenn es in einer tmux-Sitzung