Ich habe mit verschiedenen tmux-Tastenkombinationseinstellungen experimentiert und dabei Folgendes festgestellt:
Wenn ich meine tmux-Konfiguration neu lade (aus tmux heraus), bleiben die Tastaturbelegungen, die ich einmal geladen hatte, geladen. Die einzige Möglichkeit, dies zu bereinigen, besteht darin, alle tmux-Sitzungen zu beenden und neu zu starten. Es sieht also so aus, als würde sich tmux alle zuvor geladenen Tastenkombinationen merken und sie nur bei einem Neustart oder durch explizites Aufheben der Bindung entfernen.
So erstellen Sie dies neu:
- Öffne ein Terminal (A)
- starte tmux
- Überprüfen Sie, ob die Tastenkombination eine Uhr anzeigt (drücken Sie
PREFIX C-t
) - Drücken Sie
PREFIX ?
, um die Tastenkombination in der Liste anzuzeigen - bearbeiten
~/.tmux.conf
- füge eine Tastenkombination hinzu (
bind C-t display "Keybinding C-t"
) - tmux config (
PREFIX : source-file ~/.tmux.conf
) neu laden - Überprüfen Sie, ob die Tastenkombination funktioniert (drücken Sie
PREFIX C-t
) - Drücken Sie
PREFIX ?
, um die neue Tastenkombination in der Liste anzuzeigen ~/.tmux.conf
erneut bearbeiten- entferne die Tastenkombination (also entferne
bind C-t display "Keybinding C-t"
) - tmux config (
PREFIX : source-file ~/.tmux.conf
) neu laden - Überprüfen Sie, ob die Tastenkombination funktioniert (drücken Sie
PREFIX C-t
). Es wird weiterhin "Tastenkombination" angezeigt. - Drücken Sie, um
PREFIX ?
zu sehen, dass die neue Tastenkombination noch in der Liste enthalten ist - Beenden Sie tmux
- Geben Sie tmux ein
- Überprüfen Sie, ob die ursprüngliche Tastenkombination wieder funktioniert (drücken Sie
PREFIX C-t
). Jetzt sollte wieder eine Uhr angezeigt werden - Drücken Sie
PREFIX ?
, um anzuzeigen, dass die neue Tastenkombination aus der Liste entfernt wurde
Meine Frage: gibt es eine Möglichkeit, tmux anzuweisen, alle geladenen Configs zu "vergessen" und dann zu laden .tmux.conf
?
quelle
unbind-key -a
entfernt alle Tastenkombinationen. Ich werde Ihre Antwort als richtig markieren, aber um der anderen Zuschauer willen werde ich auch den "Hack" hinzufügen, den ich angewendet habe, um ein Problem mit zu behebenunbind-key -a
.Die richtige Lösung (von Peter
@Peterph hat also die richtige Antwort gegeben,
unbind-key -a
die folgendes bewirkt: (man tmux)Eine praktikable Lösung
Das Problem (für mich) ist, dass "alles" eigentlich alles bedeutet. Einschließlich der Tastenkombinationen, mit denen tmux ausgeliefert wird . Wenn Sie den
unbind-key -a
Befehl tmux sofort ausführen, sind keine Tastenkombinationen mehr vorhanden, sodass Sie nicht einmal mehr in den Befehlsmodus wechseln oder grundsätzlich etwas tun können.Mein (ziemlich hässlicher) Fix dafür ist der folgende:
.tmux.reset.conf
, das alle keybindings entfernt und dann alle diejenigen neu bindet, die tmux standardmäßig hat.tmux.conf
Meine
.tmux.conf
:Meine
.tmux.reset.conf
:Es sah irgendwie so aus, als hätte dies mit tmux-Schlüsseltabellen funktionieren können (soweit ich das beurteilen kann), aber Sie können keine neuen Schlüsseltabellen hinzufügen.
quelle
.tmux.reset.conf
indem Sietmux list-keys
eine "saubere" Sitzung ausführen.tmux -f /dev/null -L temp start-server \; list-keys
wird effektiv die Standardeinstellungen generieren (obwohl Sie einen Backslash vor dem Semikolon in seiner Bindung hinzufügen müssen).Derzeit gibt es keine direkte Möglichkeit, die Bindung eines Schlüssels auf die Standardeinstellung zurückzusetzen. Die Initialisierung der Standardbindungen (in
key_bindings_init()
) erfolgt einmalig beim ersten Start des tmux- Servers (inserver_start()
), und es gibt keinen Mechanismus zum Zurücksetzen eines einzelnen Schlüssels.Für Ihr gewünschtes Szenario , in dem Sie den Vorgang wollen Sie die Konfigurationsdatei der Beschaffung einen Standard wiederherzustellen Bindung , die zuvor von einem benutzerdefinierten außer Kraft gesetzt wurde Bindung , die seitdem von der Konfigurationsdatei gelöscht wird, entwickeln die Methode , die Sie ist sinnvoll (wenn auch leider ausführlich):
unbind-key -a
, Stellen Sie dann alle "Standard" -Bindungen wieder her und richten Sie dann Ihre benutzerdefinierten Bindungen ein (von denen einige möglicherweise eine "Standard" -Bindung überschreiben).Die aktuellen Bindungen eines Servers können mit dem
list-keys
Befehl * extrahiert werden . Dies kann beim Generieren / Verwalten der vorgeschlagenen.tmux.reset.conf
Datei hilfreich sein. Sie müssen jedoch die Standardbindungen und nicht die aktuellen Bindungen extrahieren .* Es gibt einige Situationen , in denen der Ausgang
list-keys
derzeit nicht direkt einsetzbar: für Semikolon die Bindung seiner Semikolon muss mit einem Backslash geschützt , damit er nicht als interpretiert tmux Befehlsseparator und alle Bindungen , die Argumente hatte , die doppelte Anführungszeichen innerhalb des Hauses Single Anführungszeichen (keine der Standardbindungen ist wie folgt) werden als doppelte Anführungszeichen in doppelten qoutes ausgegeben.Um die Standardbindungen zu erhalten, benötigen Sie einen temporären Server mit einer minimalen Konfiguration (dh keine benutzerdefinierten Bindungen), damit Sie die
list-keys
Ausgabe erfassen können . Es gibt keine Begrenzung für die Anzahl der tmux- Server, die Sie ausführen können, aber jeder muss einen anderen Socket-Pfadnamen verwenden. Die Optionen-L
und-S
tmux können verwendet werden, um einen Socket-Namen (in$TMPDIR/tmux-$UID
oder vollständigen Socket-Pfadnamen) anzugeben. Um also mit einem neuen Server auf einem Socket-Namen zu kommunizieren (oder diesen zu starten)temp
, verwenden Sie Folgendes:Um sicherzustellen, dass Ihre nicht verwendet wird
.tmux.conf
,-f
teilen Sie ihr mit , dass sie gelesen werden soll/dev/null
(eine spezielle Datei, die immer leer ist):Hinweis : Dies verhindert nicht die Verarbeitung von
/etc/tmux.conf
, wenn eine solche Datei vorhanden ist; Der Pfad zu dieser „Systemkonfigurationsdatei“ ist fest codiert, und es gibt keine Möglichkeit, ihn zu umgehen (außer beim Patchen des Codes).Normalerweise benötigen Sie einen
new-session
Befehl, um den Server tatsächlich zu starten, aber wir möchten keine Sitzungen, sondern nur einen initialisierten Server abfragen. Derstart-server
Befehl bewirkt genau das: Startet einen Server, ohne Sitzungen zu erstellen.Jetzt müssen wir nur noch unseren "query" -Befehl anhängen (
list-keys
in diesem Fall):Hinweis : Das Semikolon muss maskiert oder in Anführungszeichen gesetzt werden, um zu verhindern, dass die Shell es als Shell-Befehlstrennzeichen behandelt, da wir möchten, dass es ein tmux- Befehlstrennzeichen ist.
Da keine Sitzungen zu warten sind, wird der Server automatisch beendet, nachdem der
list-keys
Befehl ausgeführt wurde.Mit einem Befehl wie diesem können Sie also einen Großteil
.tmux.reset.conf
Ihrer.tmux.conf
Dateien generieren, ohne sich Gedanken über das vorübergehende Entfernen Ihrer Datei machen zu müssen (damit Sie nur die Standardbindungen sehen können) und ohne vorhandene Server herunterfahren zu müssen.Wenn der
run-shell
Befehl synchron wäre, könnten Sie einen solchen Aufruf in Ihre Konfigurationsdatei (Aufnahme in eine temporäre Datei, die Sie dann verarbeiten würdensource-file
) einbetten, anstatt eine statische Datei (Ihre.tmux.reset.conf
) zu haben. Auf diese Weise können Sie immer die Standardbindungen aus Ihrer aktuellen Version von tmux verwenden (die Standardbindungen ändern sich gelegentlich). Leider ist die Ausführung desrun-shell
Befehls derzeit in Bezug auf nachfolgende Befehle asynchron (Befehle, die nach einemrun-shell
Befehl eingehen, werden normalerweise ausgeführt, bevor der von hervorgerufene Prozessrun-shell
beendet werden konnte).quelle
Hier ist eine Zusammenfassung aller anderen Antworten in einem Bash-Skript, das automatisch
.tmux.reset.conf
aus den Standardschlüsselbindungen generiert wird :Die eingebettete
sed
Befehlszeile kümmert sich darum, verschiedene Teile der Ausgabe von zu maskierenlist-keys
. Dies muss möglicherweise an den Besonderheiten Ihres Systems angepasst werden..tmux.conf
Entbinden Sie in Ihrer Datei einfach alle Schlüssel und geben Sie einen Quellcode für diese Datei ein, bevor Sie Ihre eigenen Schlüsselbindungen definieren:quelle
Bitte beachten Sie auch die anderen Antworten hier, da sie die Situation gut erklären. Ich habe hier meine mit tmux 1.8 kompatible tmux.reset.conf, die ich nach dem Kopieren der
tmux -f /dev/null -L temp start-server \; list-keys
Ausgabe mehrfach modifizieren musste . Insbesondere mussten einige Dinge angeführt werden.quelle
Ich fragte Upstream, ob sie nicht bereit seien, das Problem zu beheben (es sei denn, jemand reicht eine PR ein).
Hier ist mein manuelles Escapezeichen
tmux list-keys
erhalten über eine neue Serverinstanz mit(dank vorheriger Antworten)
Das obige ist auf Github, damit Sie Folgendes tun können:
HINWEIS: Irgendwie führte die Antwort von Richard Cook immer noch zu Problemen.
quelle
Hier ist eine optimierte Version von Richard Cooks Antwort , um entstehende Probleme unter tmux 2.1 zu beheben
Fügen Sie am Anfang von folgende Zeilen hinzu
.tmux.conf
quelle