J'ai expérimenté différents paramètres de liaison de clés tmux et j'ai remarqué ce qui suit:
Si je recharge ma configuration tmux (à partir de tmux), les liaisons de touches que j'avais chargées une fois resteront chargées. Le seul moyen (à ma connaissance) de nettoyer cela est de quitter toutes les sessions tmux et de redémarrer. Il semble donc que tmux se souvienne de toutes les liaisons de clé précédemment chargées et ne les supprimera que lors d’un nouveau départ ou en les annulant explicitement.
Pour recréer ceci:
- ouvrir un terminal (A)
- démarrer tmux
- vérifier si le raccourci clavier affiche une horloge (appuyez sur
PREFIX C-t
) - appuyez sur
PREFIX ?
pour voir le raccourci clavier dans la liste - modifier
~/.tmux.conf
- ajouter un raccourci clavier (
bind C-t display "Keybinding C-t"
) - recharger tmux config (
PREFIX : source-file ~/.tmux.conf
) - vérifier si le raccourci clavier fonctionne (presse
PREFIX C-t
) - appuyez sur
PREFIX ?
pour voir le nouveau raccourci clavier dans la liste - éditer à
~/.tmux.conf
nouveau - enlever le raccourci clavier (donc enlever
bind C-t display "Keybinding C-t"
) - recharger tmux config (
PREFIX : source-file ~/.tmux.conf
) - vérifier si le raccourci clavier fonctionne (appuyer
PREFIX C-t
), il affiche toujours "Keybinding Ct" - appuyez sur
PREFIX ?
pour voir que le nouveau raccourci clavier est toujours dans la liste - quitter tmux
- entrez tmux
- vérifier si le raccourci clavier fonctionne à nouveau (appuyer
PREFIX C-t
), il devrait maintenant afficher à nouveau une horloge - appuyez sur
PREFIX ?
pour voir que le nouveau raccourci clavier a été retiré de la liste
Ma question: y a-t-il un moyen de demander à tmux de "oublier" toutes les configurations chargées puis de les charger .tmux.conf
?
la source
unbind-key -a
supprime tous les raccourcis clavier. Je marquerai votre réponse comme correcte, mais, dans l’intérêt des autres téléspectateurs, j’ajouterai également le "hack" que j’ai appliqué pour résoudre un problèmeunbind-key -a
.La bonne solution (par Peter
Alors, @peterph a donné la bonne réponse,
unbind-key -a
à savoir: (man tmux)Une solution réalisable
Le problème (pour moi) est que "tout" signifie en réalité tout. Y compris les raccourcis clavier fournis avec tmux . Si vous exécutez la
unbind-key -a
commande, tmux ne dispose plus d'aucune liaison de clé instantanément, vous ne pouvez donc même pas entrer en mode commande ou faire quoi que ce soit.Ma solution (plutôt moche) pour ceci est la suivante:
.tmux.reset.conf
qui supprime tous les raccourcis clavier, puis rebinds tous ceux que tmux a par défaut.tmux.conf
Mon
.tmux.conf
:Mon
.tmux.reset.conf
:On aurait dit que cela aurait pu fonctionner avec les tables de clés tmux (pour autant que je sache), mais vous ne pouvez pas ajouter de nouvelles tables de clés.
la source
.tmux.reset.conf
en exécutanttmux list-keys
une session "propre".tmux -f /dev/null -L temp start-server \; list-keys
générera effectivement les valeurs par défaut (bien que vous deviez ajouter une barre oblique inverse avant le point-virgule dans sa liaison).Il n'existe actuellement aucun moyen direct de réinitialiser la liaison d'une clé à sa valeur par défaut. l'initialisation des liaisons par défaut (in
key_bindings_init()
) est effectuée une fois lorsque le serveur tmux démarre (inserver_start()
), et il n'existe aucun mécanisme permettant de réinitialiser une clé unique.Pour le scénario souhaité dans lequel vous voulez que l'acte de sourcing de votre fichier de configuration rétablisse une liaison par défaut précédemment remplacée par une liaison personnalisée qui a depuis été supprimée de votre fichier de configuration, la méthode que vous avez conçue est raisonnable (bien que malheureusement prolixe):
unbind-key -a
, puis rétablissez toutes les liaisons «par défaut», puis établissez vos liaisons personnalisées (dont certaines peuvent remplacer une liaison «par défaut»).Les liaisons actuelles d'un serveur peuvent être extraites avec la
list-keys
commande * ; cela peut aider à générer / maintenir votre.tmux.reset.conf
fichier proposé , mais vous avez besoin d’un moyen d’extraire les liaisons par défaut , pas les liaisons actuelles .* Il y a des situations où la sortie
list-keys
est pas directement utilisable: la liaison pour virgule a besoin de son point - virgule échappé avec une barre oblique inverse pour l' empêcher d'être interprété comme un tmux séparateur de commande, et toutes les liaisons qui ont des arguments qui ont utilisé des guillemets doubles à l' intérieur unique les guillemets (aucune des liaisons par défaut ne sont comme celle-ci) apparaîtront sous forme de guillemets doubles à l'intérieur doubles à l' doubles qoutes.Pour obtenir les liaisons par défaut, vous avez besoin d'un serveur temporaire avec une configuration minimale (c'est-à-dire sans liaisons personnalisées) afin de pouvoir capturer sa
list-keys
sortie. Il n’existe aucune limite quant au nombre de serveurs tmux que vous pouvez exécuter, mais chacun doit utiliser un chemin de socket différent; les-L
et-S
tmux options peuvent être utilisées pour spécifier un nom de socket (en$TMPDIR/tmux-$UID
cheminServeur socket complet Donc, pour parler (ou commencer) un nouveau serveur sur un socket nommé.temp
, vous pouvez utiliser ceci:Pour vous assurer qu'il n'utilise pas votre
.tmux.conf
, vous utilisez-f
pour lui dire de lire/dev/null
(un fichier spécial toujours vide):Remarque : cela n’empêche pas le traitement des
/etc/tmux.conf
, si un tel fichier existe; le chemin d'accès à ce «fichier de configuration système» est codé en dur et il n'y a pas d'option pour le contourner (à moins de corriger le code).Normalement, vous avez besoin d'une
new-session
commande pour démarrer le serveur, mais nous ne voulons pas de sessions, mais simplement d'un serveur initialisé à interroger. Lastart-server
commande ne fait que cela: démarre un serveur sans créer de session.Maintenant, il suffit d’ajouter notre commande «query» (
list-keys
dans ce cas):Remarque : le point-virgule doit être échappé ou cité pour empêcher le shell de le traiter comme un séparateur de commandes shell, car nous souhaitons que ce soit un séparateur de commandes tmux .
Comme il n'y a pas de session à gérer, le serveur se ferme automatiquement une fois l'exécution de la
list-keys
commande terminée .Vous pouvez donc utiliser une commande comme celle-ci pour générer l'essentiel de votre travail
.tmux.reset.conf
sans avoir à vous soucier de la suppression temporaire de votre.tmux.conf
fichier (pour vous permettre de voir uniquement les liaisons par défaut) et sans avoir à arrêter aucun serveur existant.Si la
run-shell
commande était synchrone, vous pouvez intégrer un appel comme celui-ci dans votre fichier de configuration (capture dans un fichier temporaire que vous traiteriez ensuitesource-file
) au lieu d'avoir un fichier statique (votre.tmux.reset.conf
). Cela vous permettrait de toujours utiliser les liaisons par défaut de votre version actuelle de tmux (les liaisons par défaut changent de temps en temps). Hélas, l'achèvement de larun-shell
commande est actuellement asynchrone par rapport aux commandes suivantes (les commandes après l'run-shell
exécution d' une commande sont généralement exécutées avant que le processus généré parrun-shell
ait eu la chance de se terminer).la source
Voici un résumé de toutes les autres réponses dans un script bash généré automatiquement à
.tmux.reset.conf
partir des raccourcis clavier par défaut:La
sed
ligne de commande intégrée permet d’échapper aux différentes parties de la sortielist-keys
. Cela peut nécessiter quelques ajustements pour les spécificités de votre système.Dans votre
.tmux.conf
fichier, dissociez simplement toutes les clés et sourcez ce fichier avant de définir vos propres combinaisons de touches:la source
Veuillez également vous référer aux autres réponses ici, car elles expliquent bien la situation. J'ai ici mon tmux.reset.conf compatible 1.8, que j'ai dû faire plusieurs modifications après avoir copié la
tmux -f /dev/null -L temp start-server \; list-keys
sortie. En particulier, plusieurs choses devaient être citées.la source
J'ai demandé en amont qu'ils ne semblaient pas disposés à le réparer (à moins que quelqu'un ne présente un PR).
Voici mon échappé manuellement
tmux list-keys
, obtenu via une nouvelle instance de serveur avec(merci aux réponses précédentes)
Ce qui précède est sur github pour que vous puissiez faire:
NOTE: D'une manière ou d'une autre, la réponse de Richard Cook produisait toujours des problèmes évidents.
la source
Voici une version peaufinée de la réponse de Richard Cook pour résoudre les problèmes qui échappent sous tmux 2.1
Ajouter les lignes suivantes au début de
.tmux.conf
la source