4

В ~/.tmux.conf , с

 bind-key v split-window "vim"

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

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

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

4 ответа4

5

Ты не можешь. 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" и нажать Enter. "G" будет передан в качестве аргумента tmux-vim.bash , и этот сценарий позаботится о выполнении команды tmux вы (изначально) хотели связать с "vG".

4

Как сказал @chepner, вы не можете сделать это напрямую. Что вы можете сделать, так это связать 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, а затем связать ключ для запуска этих сценариев.

Для более сложного примера см. Эту суть.

0

Помимо подхода 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

Ответ

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

    # 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .