Al momento non esiste un modo diretto per ripristinare il legame di una chiave al suo valore predefinito; l'inizializzazione dei binding predefiniti (in key_bindings_init()) viene eseguita una volta all'avvio del server tmux (in server_start()) e non esiste alcun meccanismo per reimpostare una singola chiave.
Per il vostro scenario desiderato in cui si desidera l'atto di approvvigionamento il file di configurazione di ristabilire un legame che è stato precedentemente ignorato da un legame che da allora è stato eliminato dal file di configurazione personalizzata di default, il metodo che si elaborata è ragionevole (anche se purtroppo verbose): unbind-key -a, quindi ristabilire tutti i bind "predefiniti", quindi stabilire i bind personalizzati (alcuni dei quali potrebbero sostituire un bind "predefinito").
I binding correnti di un server possono essere estratti con il list-keyscomando * ; questo può aiutare a generare / mantenere il .tmux.reset.conffile proposto , ma è necessario un modo per estrarre i binding predefiniti , non i binding correnti .
* Ci sono alcune situazioni in cui l'output di list-keysnon è attualmente direttamente utilizzabile: la rilegatura per punto e virgola necessita che il suo punto e virgola sia sfuggito a una barra rovesciata per impedire che venga interpretato come un separatore di comandi tmux e qualsiasi associazione che avesse argomenti che utilizzavano virgolette doppie all'interno di un singolo le virgolette (nessuna delle associazioni predefinite sono così) verranno visualizzate come doppie virgolette all'interno di doppie qoutes.
Per ottenere i bind predefiniti è necessario un server temporaneo con una configurazione minima (ovvero senza bind personalizzati) in modo da poterne catturare l' list-keysoutput. Non vi è alcun limite al numero di server tmux che è possibile eseguire, ma ognuno deve utilizzare un nome percorso socket diverso; le opzioni -Le -S tmux possono essere utilizzate per specificare un nome socket (in $TMPDIR/tmux-$UIDo nome percorso socket completo. Quindi, per parlare (o avviare) un nuovo server su un socket chiamato temp, si dovrebbe usare questo:
tmux -L temp …
Per assicurarti che non usi il tuo .tmux.conf, lo usi -fper dirgli di leggere /dev/null(un file speciale che è sempre vuoto):
tmux -f /dev/null -L temp …
Nota : questo non impedisce l'elaborazione di /etc/tmux.conf, se esiste un tale file; il percorso di questo "file di configurazione del sistema" è hardcoded e non esiste alcuna opzione per bypassarlo (a parte il patching del codice).
Normalmente, è necessario un new-sessioncomando per avviare effettivamente il server, ma non vogliamo alcuna sessione, ma solo un server inizializzato da interrogare. Il start-servercomando fa proprio questo: avvia un server senza creare alcuna sessione.
tmux -f /dev/null -L temp start-server …
Ora, dobbiamo solo aggiungere il nostro comando "query" ( list-keysin questo caso):
tmux -f /dev/null -L temp start-server \; list-keys
Nota : il punto e virgola deve essere sottoposto a escape o quotato per impedire alla shell di trattarlo come un separatore di comandi di shell poiché vogliamo che sia un separatore di comandi tmux .
Poiché non ci sono sessioni da mantenere, il server verrà chiuso automaticamente al termine dell'esecuzione del list-keyscomando.
Quindi, puoi usare un comando come questo per generare la maggior parte dei tuoi .tmux.reset.confsenza doversi preoccupare di rimuovere temporaneamente il tuo .tmux.conffile (per farti vedere solo i bind predefiniti) e senza chiudere alcun server esistente.
Se il run-shellcomando era sincrono, è possibile incorporare una chiamata come questa nel file di configurazione (acquisizione in un file temporaneo con il quale si elaborerebbe quindi source-file) anziché disporre di un file statico (il proprio .tmux.reset.conf). Ciò ti consentirebbe di utilizzare sempre i collegamenti predefiniti della versione corrente di tmux (i collegamenti predefiniti cambiano di tanto in tanto). Purtroppo, il completamento del run-shellcomando è attualmente asincrono rispetto ai comandi successivi (i comandi che vengono dopo un run-shellcomando di solito verranno eseguiti prima che il processo generato da run-shellabbia avuto la possibilità di terminare).