Ich habe eine Reihe von Dotfiles, die es mir ermöglichen, ein hübsches Design auf meinem Terminal und tmux auf meinem lokalen Host zu haben. Ich verwende Kitty, Fish und tmux. Um Farben richtig zu definieren und eine globale Kohärenz zu erreichen, verwende ich die folgenden Dateien:
- .XRessourcen
- kitty.conf
- fish_prompt.fisch
- .tmux.conf
Auf meinem lokalen Host sieht alles wirklich sauber aus:
Ich habe auch einen Remote-Server, auf dem dasselbe Arch + Fish + Tmux läuft und der genau dieselben Dotfiles verwendet. Wenn ich mich jedoch per SSH mit dem Server verbinde, sieht alles völlig anders aus:
Ich habe gegoogelt und bin auf viele Tutorials gestoßen, in denen man aufgefordert wird, eine Reihe merkwürdiger Konfigurationen hinzuzufügen. In keinem wird jedoch erklärt, was im Hintergrund wirklich passiert (und wie Sie sehen, hat keines davon funktioniert).
So habe ich versucht, es zum Laufen zu bringen (ohne wirklich zu verstehen, warum):
- Zu tmux.conf hinzugefügt:
set^[[3m -g default-terminal "xterm-kitty"
set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
- Die xterm-kitty-Terminfo-Datei wurde hinzugefügt
- Ändern Sie die
TERM
Umgebungsvariable beim Anmelden in xterm-kitty
Ich würde mich über einige Ressourcen freuen, die zeigen, wie das alles funktioniert! Danke!
Bearbeiten :
Der Übersichtlichkeit halber sind hier die Werte, die TERM
ich habe:
- Auf dem lokalen Host:
xterm-kitty
- Auf dem lokalen Host innerhalb von tmux:
xterm-256color
- Auf dem Remote-Host direkt nach dem Öffnen von SSH:
xterm-kitty
- Auf dem Remote-Host in tmux:
xterm-256color
Alle Dateien werden über ein Git-Repo synchronisiert, alle Versionen sind identisch. Ich habe die gleiche terminfo
Datei auf xterm-kitty
beide Hosts übertragen. Außerdem mitDasSkript kann ich sehen, dass alle Farben richtig angezeigt werden und auf beiden Hosts identisch sind.
Mir ist auch aufgefallen, dass die Anmeldung beim Remote-Computer ohne tmux eine weitere Farbkombination ergibt (überall wird die gleiche Fish-Konfigurationsdatei verwendet):
Antwort1
default-terminal
legt den Standardwert TERM
innerhalb von tmux fest. Setzen Sie dies nicht auf xterm-kitty
- tmux ist nicht xterm oder kitty. Setzen Sie es auf tmux-256color
, wenn es auf Ihrem Computer vorhanden ist (aktivieren Sie infocmp tmux-256color
), andernfalls screen-256color
.
Ebenso sollten Sie in Shell-Profilen nicht TERM
für alle Terminals das Gleiche festlegen.
Die terminal-overrides
Zeile, die Sie haben, teilt tmux mit, dass, wenn es TERM
die Einstellung sieht xterm-kitty
, das Terminal echte (RGB-)Farben unterstützt (daher Tc
).
TERM
Innerhalb von tmux wird den Programmen innerhalb von tmux mitgeteilt, mit wem sie kommunizieren (tmux). TERM
Außerhalb von tmux wird tmux mitgeteilt, mit wem es kommuniziert (in diesem Fall mit Kitty).
Wenn es lokal, aber nicht über SSH funktioniert, sind die wahrscheinlichsten Gründe:
Außerhalb von tmux anders
TERM
. Sind Sie sicher, dassecho $TERM
unmittelbar vor dem Start von tmux auf Ihrem lokalen Computer und über SSH dasselbe angezeigt wird?Die tmux-Konfigurationen sind nicht wirklich gleich. Sind Sie sicher, dass sie es sind? Wenn Sie es
terminal-overrides
an einer Stelle brauchen, brauchen Sie es auch an der anderen, wenn nicht, dann nicht.Sind Sie sicher,
xterm-kitty
dass es auf beiden Computern vorhanden ist und dasselbe ist? Überprüfen Sie esinfocmp xterm-kitty
.Unterschiedliche tmux-Versionen. Sind Sie sicher, dass sie gleich sind? Überprüfen Sie
tmux -V
.
Antwort2
Wenn Sie tmux auf dem lokalen Computer verwenden und dann SSH zum Remotecomputer ausführen, kann die Remotesitzung auf keinen Fall erkennen, dass Sie anstelle von (oder zusätzlich zu) indizierten (256-Farben) RGB-Farben verwenden können. Das liegt daran, dass die tmux-Überschreibung „Tc“ für die Remotesitzung nicht sichtbar ist.
Sie können dies umgehen, indem Sie die Terminalbeschreibung ändern, die derStandardterminalEinstellung von tmux, z. B. indem Sie die Einstellungen hinzufügen, die Sie mitTerminal-Overrideszur Textdatei für die Terminalbeschreibung und mittic
um es zu kompilieren (auf jeder Maschine). Zum Beispiel (wenn dieStandardterminalIsttmux
):
infocmp -x tmux >foo
printf '\tTc,\n' >>foo
tic -x foo
Kitty hat eineFAQ, aber es übersieht "-x" fürinfocmp
.
Es sind noch ein paar weitere Punkte zu berücksichtigen:
Kopieren der von
tic
ist (aus mehr als einem Grund) unzuverlässig.Wenn die gleiche Terminalbeschreibung auf der Remote-Seite verfügbar ist, erhalten Sie ein (mehr) konsistentes Verhalten, vorausgesetzt, dass die Remote-Anwendung die Terminalbeschreibung verwendetInhalteher als dasNameder Klemmenbeschreibung.
Antwort3
Habe es geschafft, es zu beheben! Es war eine Kombination aller gegebenen Antworten mit einer wichtigen zusätzlichen Variable.
Erforderliche Schritte:
- Sicherstellen, dass die
TERM
verwendeten Variablen auf jedem Host und in jedem TMUX gleich sind (ich habe sie letztendlichxterm-kitty
direkt auf den Hosts undtlux-256color
in den TMUX-Sitzungen verwendet).Dank an Nicholas Marriott. - füge
Tc;
dem Infocmp der von mir verwendeten Terminals hinzu, indem ichDieser Ausschnitt stammt von Thomas Dickey:
infocmp -x tmux-256color >foo
printf '\tTc,\n' >>foo
tic -x foo
- Fügen Sie es
set -g fish_term24bit 1
zu meiner Datei config.fish hinzu, um Fish zur Verwendung des Trucolor-Modus zu zwingen.