tmux bind-key avec deux clés

4

Dans ~/.tmux.conf, avec

 bind-key v split-window "vim"

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

Comment puis-je utiliser deux clés dans un tmux bind-key?
Exemple:

 bind-key vG split-window "vim +$"
Juan Pablo
la source

Réponses:

5

Vous ne pouvez pas. tmuxn'autorise que les liaisons à clé unique (seules, en utilisant bind-key -nou en suivant la clé de préfixe).

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

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

tmux-vim.bashressemble 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 suffira de taper "G" et d'appuyer sur Entrée. "G" serait passé comme argument à tmux-vim.bash, et ce script se chargerait d'exécuter la tmuxcommande que vous vouliez (à l'origine) associer à "vG".

chepner
la source
Vous penseriez que je me serais souvenu d'avoir répondu à cette question assez bien pour pouvoir y faire un lien moi-même :)
chepner
4

Comme @chepner l'a dit, vous ne pouvez pas le faire directement . Ce que vous pouvez faire est vde créer une liaison Gqui crée ce que vous voulez, puis qui se dissocie.

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 niveau supérieur existantes (dans ce cas G); Si vous souhaitez que quelque chose soit lié à Get que quelque chose d'autre soit lié à vGvotre étape de dégroupage, vous devez restaurer la liaison d'origine.
  2. tmuxsegfault si vous incluez .tmux.confune bind-keydéclaration trop longue. Si cela devient un problème, vous pouvez contourner ce problème en plaçant votre changement de contexte dans des scripts bash, puis lier une clé pour exécuter ces scripts.

Pour un exemple plus compliqué, voyez cet article .

hjdivad
la source
0

Au-delà de l' command-promptapproche proposée dans les autres réponses, vous pouvez avoir un deuxième ensemble de mappages en 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 pouvez faire ce qui suit:

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

mapper à c-v gau lieu de c-b vG. L'inconvénient est qu'il occultera tout mappage par défaut, car il sera également accessible via c-b g.

mMontu
la source
0

Répondre

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 plutôt utiliser celui-ci:

    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 de tablette unique 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
datysho
la source