J'essaie d'expérimenter différents paramètres de clavier TMUX et j'ai remarqué ce qui suit:
Si je rechargez ma configuration TMUX (à partir de TMUX), les bornes de clés que je serais chargées une fois restent chargées. Le seul moyen (je sais) de nettoyer ce problème est de quitter toutes les sessions TMUX et de redémarrer. Il semble donc que TMUX se souvient de tous les clés chargés auparavant chargé et ne les supprimera que sur un nouveau départ ou en les détenant explicitement.
Pour recréer ceci:
PREFIX C-t
)PREFIX ?
Pour voir le clavier dans la liste~/.tmux.conf
bind C-t display "Keybinding C-t"
)PREFIX : source-file ~/.tmux.conf
)PREFIX C-t
)PREFIX ?
Pour voir le nouveau Keybinding dans la liste~/.tmux.conf
de nouveaubind C-t display "Keybinding C-t"
)PREFIX : source-file ~/.tmux.conf
)PREFIX C-t
), il affiche toujours "KeyBinding C-T"PREFIX ?
Pour voir que le nouveau Keybinding est toujours dans la listePREFIX C-t
), il devrait maintenant afficher une horloge à nouveauPREFIX ?
Pour voir que le nouveau KeyBinding a été supprimé de la listeMa question: Existe-t-il un moyen d'instruire TMUX d'oublier "toutes les configures chargées, puis de charger .tmux.conf
?
Selon la page tmux(1)
Man, unbind-key -a
est ce que vous recherchez.
Notez que tmux
exécute un serveur qui ne quitte qu'une fois que toutes les sessions sont fermées et que les fixations de clé sont par serveur. Par conséquent, une fois que vous avez créé une contraignante, il sera persistant sur tous les détachoirs du client.
Cela dit, mis unbind-key -a
Au début de votre fichier de configuration, et sur CONFIG RELOAD, il devrait faire ce que vous voulez - tout le refroidissement et commencer la liaison à partir de zéro. Ou - si vos modifications sont plus petites - innove que ce que vous voulez changer.
la solution correcte (par Peter
Donc, @peterph a donné la bonne réponse qui est unbind-key -a
qui fait ce qui suit: (homme tmux)
Si -a est présent, toutes les liaisons clés sont supprimées.
ne solution réalisable
Le problème (pour moi) est que "tous" signifie réellement tout. y compris les keybindings tmux est livré avec. Si vous exécutez le unbind-key -a
COMMANDER TMUX n'a instantanément aucun clavier à tout moment, vous ne pouvez même pas entrer en mode de commande ni ne rien faire fondamentalement.
Mon correctif (plutôt laid) pour cela est ce qui suit:
.tmux.reset.conf
qui supprime tous les clés de clés, puis rebinets tous ceux TMUX ont par défaut.tmux.conf
Mon .tmux.conf
:
# always load the reset file first
source-file ~/.tmux.reset.conf
Mon .tmux.reset.conf
:
# First remove *all* keybindings
unbind-key -a
# Now reinsert all the regular tmux keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key " split-window
bind-key # list-buffers
bind-key $ command-Prompt -I #S "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key ' command-Prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-Prompt -I #W "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-Prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-Prompt
bind-key ; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-Prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-session
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key ~ show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key -r M-1 select-layout even-horizontal
bind-key -r M-2 select-layout even-vertical
bind-key -r M-3 select-layout main-horizontal
bind-key -r M-4 select-layout main-vertical
bind-key -r M-5 select-layout tiled
bind-key -r M-n next-window -a
bind-key -r M-o rotate-window -D
bind-key -r M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R
Cela semblait un peu que cela aurait pu avoir travaillé avec TMUX Key-Tables (autant que je puisse le dire), mais vous ne pouvez pas ajouter de nouvelles tables clés.
Il n'y a actuellement aucun moyen direct de réinitialiser la liaison d'une clé à sa valeur par défaut; L'initialisation des liaisons par défaut (dans key_bindings_init()
) est effectuée une fois lorsque le fichier tmux Server commence d'abord (en server_start()
), et il n'y a pas de mécanisme pour réinitialiser une seule touche.
Pour votre scénario souhaité où vous souhaitez que l'acte d'approvisionnement de votre fichier de configuration rétablit une liaison par défaut qui a été précédemment remplacée par une liaison personnalisée qui a depuis été supprimée depuis votre fichier de configuration, la méthode que vous avez élaborée est raisonnable (malheureusement verbeuse): unbind-key -a
, puis rétablissez toutes les liaisons "par défaut", puis établissez vos liaisons personnalisées (dont certaines pourraient remplacer une liaison "par défaut").
Les liaisons actuelles d'un serveur peuvent être extraites avec le list-keys
commande*; Cela peut aider à générer/à conserver votre proposition .tmux.reset.conf
Fichier, mais vous avez besoin d'un moyen d'extraire les fixations par défaut, pas les fixations courant.
* Il y a des situations où la sortie de list-keys
N'est pas actuellement directement utilisable: la liaison pour le point-virgule a besoin de son point-virgule s'est échappé avec une barre oblique inverse pour empêcher son interprétation comme un TMUX Séparateur de commande et toute fixation qui avait des arguments utilisant des citations doubles utilisées Intérieur Single Citations (aucune des liaisons par défaut ne sont comme ceci) sortira comme des citations doubles à l'intérieur double qoutes.
Pour obtenir les liaisons par défaut, vous avez besoin d'un serveur temporaire avec une configuration minimale (c'est-à-dire aucune liaison personnalisée) afin que vous puissiez capturer son list-keys
sortir. Il n'y a pas de limite au nombre de tmux Serveurs que vous pouvez exécuter, mais chacun doit utiliser un nom de piste de prise différent; les -L
et -S
tmux Les options peuvent être utilisées pour spécifier un nom de prise (dans $TMPDIR/tmux-$UID
ou piste de socket complet. Donc, parler (ou démarrer) un nouveau serveur sur un socket nommé temp
, vous utiliseriez ceci:
tmux -L temp …
Pour vous assurer qu'il n'utilise pas votre .tmux.conf
, tu utilises -f
Pour le dire de lire /dev/null
(un fichier spécial qui est toujours vide):
tmux -f /dev/null -L temp …
NOTE: Cela n'empêche pas le traitement de /etc/tmux.conf
, si un tel fichier existe; Le chemin de ce "fichier de configuration du système" est codé dur et il n'ya aucune option pour le contourner (à compter de la correction du code).
Normalement, vous avez besoin d'un new-session
Commande de démarrer réellement le serveur, mais nous ne voulons pas de sessions, juste un serveur initialisé à interroger. Les start-server
La commande ne fait que: Démarre un serveur sans créer de sessions.
tmux -f /dev/null -L temp start-server …
Maintenant, nous devons juste ajouter notre commande "Query" (list-keys
dans ce cas):
tmux -f /dev/null -L temp start-server \; list-keys
Remarque: le point-virgule doit être échappé ou cité pour empêcher la coque de le traiter comme un séparateur de commande shell puisque nous voulons que ce soit un tmux Séparateur de commande .
Comme il n'y a pas de sessions à maintenir, le serveur quitte automatiquement après avoir fini d'exécuter le list-keys
commande.
Donc, vous pouvez utiliser une commande comme celle-ci pour générer la majeure partie de votre .tmux.reset.conf
sans avoir à vous soucier de retirer temporairement votre .tmux.conf
Fichier (pour vous permettre de voir simplement les liaisons par défaut) et sans avoir à éteindre les serveurs existants.
Si la run-Shell
La commande était synchrone, vous pouvez intégrer un appel comme celui-ci dans votre fichier de configuration (capturer à un fichier temporaire que vous traiteriez alors avec source-file
) au lieu d'avoir un fichier statique (votre .tmux.reset.conf
). Cela vous permettrait toujours d'utiliser les liaisons par défaut de votre version actuelle de tmux (les liaisons par défaut changent occasionnellement). Hélas, l'achèvement de la run-Shell
La commande est actuellement asynchrone en ce qui concerne les commandes ultérieures (commandes qui viennent après un run-Shell
la commande fonctionnera habituellement avant le processus engagé par run-Shell
a eu une chance de finir).
J'ai demandé en amont Ils ne semblent pas voulus de le réparer (à moins que quelqu'un soumet un PR).
Voici mon échappé manuellement tmux list-keys
, obtenu via une nouvelle instance de serveur avec
tmux -f /dev/null -L temp start-server \; list-keys
(Merci aux réponses précédentes)
## See https://github.com/tmux/tmux/issues/729: How to reset key bindings to default? #729
bind-key -T prefix C-b send-prefix
bind-key -T prefix C-o rotate-window
bind-key -T prefix C-z suspend-client
bind-key -T prefix Space next-layout
bind-key -T prefix ! break-pane
bind-key -T prefix '"' split-window
bind-key -T prefix '#' list-buffers
bind-key -T prefix '$' command-Prompt -I '#'S "rename-session '%%'"
bind-key -T prefix % split-window -h
bind-key -T prefix & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key -T prefix "'" command-Prompt -p index "select-window -t ':%%'"
bind-key -T prefix ( switch-client -p
bind-key -T prefix ) switch-client -n
bind-key -T prefix , command-Prompt -I '#W' "rename-window '%%'"
bind-key -T prefix - delete-buffer
bind-key -T prefix . command-Prompt "move-window -t '%%'"
bind-key -T prefix 0 select-window -t :=0
bind-key -T prefix 1 select-window -t :=1
bind-key -T prefix 2 select-window -t :=2
bind-key -T prefix 3 select-window -t :=3
bind-key -T prefix 4 select-window -t :=4
bind-key -T prefix 5 select-window -t :=5
bind-key -T prefix 6 select-window -t :=6
bind-key -T prefix 7 select-window -t :=7
bind-key -T prefix 8 select-window -t :=8
bind-key -T prefix 9 select-window -t :=9
bind-key -T prefix ':' command-Prompt
bind-key -T prefix \; last-pane
bind-key -T prefix = choose-buffer
bind-key -T prefix ? list-keys
bind-key -T prefix D choose-client
bind-key -T prefix L switch-client -l
bind-key -T prefix M select-pane -M
bind-key -T prefix [ copy-mode
bind-key -T prefix ] paste-buffer
bind-key -T prefix c new-window
bind-key -T prefix d detach-client
bind-key -T prefix f command-Prompt "find-window '%%'"
bind-key -T prefix i display-message
bind-key -T prefix l last-window
bind-key -T prefix m select-pane -m
bind-key -T prefix n next-window
bind-key -T prefix o select-pane -t :.+
bind-key -T prefix p previous-window
bind-key -T prefix q display-panes
bind-key -T prefix r refresh-client
bind-key -T prefix s choose-tree
bind-key -T prefix t clock-mode
bind-key -T prefix w choose-window
bind-key -T prefix x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key -T prefix z resize-pane -Z
bind-key -T prefix { swap-pane -U
bind-key -T prefix } swap-pane -D
bind-key -T prefix '~' show-messages
bind-key -T prefix PPage copy-mode -u
bind-key -r -T prefix Up select-pane -U
bind-key -r -T prefix Down select-pane -D
bind-key -r -T prefix Left select-pane -L
bind-key -r -T prefix Right select-pane -R
bind-key -T prefix M-1 select-layout even-horizontal
bind-key -T prefix M-2 select-layout even-vertical
bind-key -T prefix M-3 select-layout main-horizontal
bind-key -T prefix M-4 select-layout main-vertical
bind-key -T prefix M-5 select-layout tiled
bind-key -T prefix M-n next-window -a
bind-key -T prefix M-o rotate-window -D
bind-key -T prefix M-p previous-window -a
bind-key -r -T prefix M-Up resize-pane -U 5
bind-key -r -T prefix M-Down resize-pane -D 5
bind-key -r -T prefix M-Left resize-pane -L 5
bind-key -r -T prefix M-Right resize-pane -R 5
bind-key -r -T prefix C-Up resize-pane -U
bind-key -r -T prefix C-Down resize-pane -D
bind-key -r -T prefix C-Left resize-pane -L
bind-key -r -T prefix C-Right resize-pane -R
bind-key -T root MouseDown1Pane select-pane -t = \; send-keys -M
bind-key -T root MouseDown1Status select-window -t =
bind-key -T root MouseDown3Pane if-Shell -F -t = '#{mouse_any_flag}' "select-pane -t=; send-keys -M" "select-pane -mt="
# Someone also was wondering how to fix here: http://tmux-users.narkive.com/dTFVvLMh/is-it-possible-to-have-a-binding-that-brings-back-mouse-behavior
bind-key -T root MouseDrag1Pane if-Shell -F -t = '#{mouse_any_flag}' "if -Ft= '#{pane_in_mode}' 'copy-mode -M' 'send-keys -M' " "copy-mode -M"
bind-key -T root MouseDrag1Border resize-pane -M
bind-key -T root WheelUpPane if-Shell -F -t = '#{mouse_any_flag}' "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -et=' "
bind-key -T root WheelUpStatus previous-window
bind-key -T root WheelDownStatus next-window
Le ci-dessus est sur github afin que vous puissiez faire:
curl -L https://raw.githubusercontent.com/timotheecour/dinocode/master/tmux_list_keys_escaped.txt > ~/.tmux.reset.conf
unbind-key -a
source-file ~/.tmux.reset.conf
Remarque: en quelque sorte Richard Cook's Réponse encore produit des problèmes d'échappement.
Veuillez également vous référer aux autres réponses ici, car elles font un bon travail d'explication de la situation. J'ai ici mon tmux 1.8 compatible tmux.reset.conf, que j'ai dû faire plusieurs modifications après avoir copié le tmux -f /dev/null -L temp start-server \; list-keys
sortir. En particulier, plusieurs choses devaient être citées.
# First remove *all* keybindings
unbind-key -a
# Now reinsert all the regular tmux keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key '"' split-window
bind-key '#' list-buffers
bind-key '$' command-Prompt -I "#S" "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key "'" command-Prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-Prompt -I "#W" "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-Prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-Prompt
bind-key \; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-Prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-tree
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key z resize-pane -Z
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key '~' show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key M-1 select-layout even-horizontal
bind-key M-2 select-layout even-vertical
bind-key M-3 select-layout main-horizontal
bind-key M-4 select-layout main-vertical
bind-key M-5 select-layout tiled
bind-key M-n next-window -a
bind-key M-o rotate-window -D
bind-key M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R