Вопрос tmux bind-key с двумя ключами


В ~/.tmux.conf, с

 bind-key v split-window "vim"

Я могу запустить vim в разделенном окне.

как я могу использовать два ключа в tmux bind-key ?
Пример:

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

3
2017-07-09 15:11


происхождения




ответы:


Ты не можешь. tmux допускает только одноключевые привязки (либо в одиночку, используя bind-key -n, или после ключа префикса).

Однако вы можете попробовать привязать «v» к вызову command-prompt:

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

где tmux-vim.bash выглядит примерно так

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

Затем, набрав v, чтобы перейти в командную строку, вы просто наберете «G» и нажмите «Ввод». «G» будет передано в качестве аргумента tmux-vim.bash, и этот скрипт позаботится о выполнении tmux команда, которую вы (первоначально) хотели связать с «vG».


5
2017-07-09 15:47



быстрые клавиши для клавишной клавиатуры tmux или эквивалент для экранных bind -c + command -c - juanpablo
Вы бы подумали, что я бы вспомнил, что ответил на это достаточно хорошо, чтобы связать его сам :) - chepner


Как сказал @chepner, вы не можете этого сделать непосредственно, Что вы можете сделать, это bind v создать привязку для G это делает то, что вы хотите, а затем отрывает себя.

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

При таком подходе есть несколько важных моментов:

  1. Это будет противоречить существующим связям верхнего уровня (в этом случае G); Если вы хотите что-то связать G и что-то еще связанное с vG вашему отрывному шагу необходимо восстановить оригинальную привязку.
  2. tmux будет segfault, если ваш .tmux.conf включает bind-key слишком длинный. Если это становится проблемой, вы можете обойти это, включив контекст в сценарии bash, а затем привяжите ключ для запуска этих скриптов.

Для более активного примера см. этот смысл,


4
2018-05-22 22:46





Вне command-prompt подход, предложенный по другим ответам, вы можете иметь второй набор сопоставлений с использованием другого префикса:

     prefix key
         Set the key accepted as a prefix key.

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

Таким образом, вы можете сделать следующее:

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

отобразить c-v g вместо c-b vG, Недостатком является то, что он будет затенять любое сопоставление по умолчанию, поскольку оно также будет доступно через c-b g,


0
2017-08-14 13:48





Ответ

Для этого есть только одно правильное решение:

    # 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

Если вы хотите использовать пользовательские аргументы, вы должны использовать это:

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

Дополнительные примеры:

    # 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

Замечательная вещь

Вы должны использовать уникальное имя ключевого планшета для каждого мультиобмена. Пример:

    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

0
2017-11-05 11:34