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 (in server_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:
tmux -L temp …
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):
tmux -f /dev/null -L temp …
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. Der start-server
Befehl bewirkt genau das: Startet einen Server, ohne Sitzungen zu erstellen.
tmux -f /dev/null -L temp start-server …
Jetzt müssen wir nur noch unseren "query" -Befehl anhängen ( list-keys
in diesem Fall):
tmux -f /dev/null -L temp start-server \; list-keys
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ürden source-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 des run-shell
Befehls derzeit in Bezug auf nachfolgende Befehle asynchron (Befehle, die nach einem run-shell
Befehl eingehen, werden normalerweise ausgeführt, bevor der von hervorgerufene Prozess run-shell
beendet werden konnte).