9 votes

tmux bind-key avec deux touches

Unter ~/.tmux.conf avec

 bind-key v split-window "vim"

Je peux lancer vim dans une fenêtre divisée.

Comment puis-je utiliser deux touches dans un tmux ? bind-key ?
Exemple :

 bind-key vG split-window "vim +$"

8voto

datysho Points 81

Réponse :

Il n'y a qu'une seule bonne solution pour cela :

    # you can use "vim +$" as well, but I don't think that +$ prefix have any sense without the file path argument...
    bind -T multiKeyBindings G split-window "vim" 
    bind v switch-client -T multiKeyBindings

Si vous voulez avoir la possibilité de passer des arguments personnalisés, vous devriez utiliser celui-ci à la place :

    bind -T multiKeyBindings G command-prompt 'split-window "vim %%"'
    bind v switch-client -T multiKeyBindings

Plus d'exemples :

    # Toggle maximizing of current pane by typing PREFIX mm 
    bind -T multiKeyBindings m resize-pane -Z
    bind m switch-client -T multiKeyBindings

    # or without PREFIX
    bind -T multiKeyBindings m resize-pane -Z
    bind -n m switch-client -T multiKeyBindings

    # rename current window by typing PREFIX mr
    bind -T multiKeyBindings r command-prompt 'rename-window %%'
    bind -n m switch-client -T multiKeyBindings

La chose notable

Vous devez utiliser un nom unique de tablette de touches pour chaque liaison multiple. Exemple :

    bind -T multiKeyBinding1 G split-window "vim"
    bind v switch-client -T multiKeyBinding1

    bind -T multiKeyBinding2 m resize-pane -Z
    bind -n m switch-client -T multiKeyBinding2

7voto

chepner Points 6381

Vous ne pouvez pas. tmux n'autorise que les liaisons à une seule touche (soit seule, soit à l'aide de bind-key -n ou en suivant la touche de préfixe).

Cependant, vous pouvez essayer de lier "v" à une invocation de la fonction command-prompt :

bind-key v command-prompt "tmux-vim.bash %%"

donde tmux-vim.bash ressemble à quelque chose comme

if [ $1 = "G" ]; then
    tmux split-window "vim +$"
fi

Ensuite, après avoir tapé v pour accéder à l'invite de commande, il vous suffit de taper "G" et d'appuyer sur Entrée. "G" sera passé comme argument à la commande tmux-vim.bash et que script s'occuperait de l'exécution des tmux que vous vouliez (à l'origine) associer à "vG".

4voto

hjdivad Points 141

Comme l'a dit @chepner, vous ne pouvez pas faire cela directement . Ce que vous pouvez faire, c'est lier v pour créer une liaison pour G qui fait ce que vous voulez et se détache ensuite.

bind-key v bind-key -n G split-window "vim +$" \\; unbind -n G

Il y a deux choses importantes à noter avec cette approche :

  1. Cela entrera en conflit avec les liaisons de premier niveau existantes (dans ce cas, l'option G ) ; Si vous voulez que quelque chose soit lié à G et quelque chose d'autre lié à vG votre étape de déliaison doit rétablir la reliure d'origine.
  2. tmux se mettra en défaut si votre .tmux.conf comprend un bind-key une déclaration trop longue. Si cela devient un problème, vous pouvez le contourner en mettant votre changement de contexte dans les scripts de bash et ensuite lier une touche pour exécuter ces scripts.

Pour un exemple plus complexe, voir cette phrase .

3voto

pjincz Points 131

Après 2015, oui, vous pouvez le faire.

Ils ajoutent un nouvel argument -T key-table a switch-client pour prendre en charge cette fonctionnalité. Voici la commande commit : https://github.com/tmux/tmux/commit/bded7437064c76dd6cf4e76e558d826859adcc79

Peut-être que cette fonctionnalité a été publiée dans la version 2.1, mais je n'ai pas vu de notes de publication à ce sujet.

Voici la façon d'archiver cet objectif :

tâche : faire quelque chose comme : bind-key vG split-window "vim +$" code :

bind-key -T prefix v switch-client -T prefix_v
bind-key -T prefix_v G split-window "vim +$"

0voto

macbutch Points 1126

Au-delà de la command-prompt approche suggérée dans les autres réponses, vous pouvez avoir un deuxième ensemble de mappings utilisant un préfixe différent :

     prefix key
         Set the key accepted as a prefix key.

     prefix2 key
         Set a secondary key accepted as a prefix key.

Ainsi, vous pourriez faire ce qui suit :

set -g prefix C-v
bind-key G split-window "vim +$"

à mettre en correspondance avec c-v g au lieu de c-b vG . L'inconvénient est qu'il fera de l'ombre à tout mappage par défaut, puisqu'il sera également accessible par l'intermédiaire de c-b g .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X