Тодд Фрид прав, «правильный» способ сделать это - использовать \;
. Вроде. Но есть загвоздка.
Видите ли, вы соединяете последовательность команд tmux вместе, давая tmux соединение ;
. Таким образом, в файле, полученном от tmux, вы можете сказать
new-session "monitor1" ; split-window -v "monitor2"
если по какой-то причине вы хотели, чтобы все это было в одной строке. Теперь вы можете передать этот однострочный составной оператор tmux
команде также из оболочки, но его ;
необходимо экранировать, чтобы оболочка интерпретировала его как еще один аргумент для tmux
. Таким образом, эквивалент вышеупомянутого из оболочки
$ tmux new-session "monitor1" \; split-window -v "monitor2"
Точно так же команда tmux bind-key
принимает серию аргументов, которые являются командой tmux и аргументами, запускаемыми при нажатии клавиши. Если вы хотите привязать C-q
вышеуказанную последовательность из файла, созданного tmux, вы бы сказали
bind-key -n C-q new-session "monitor1" \; split-window -v "monitor2"
Здесь мы экранировали ;
от tmux , так что tmux интерпретирует его не как конец bind-key
команды, а как еще один аргумент, чтобы bind-key
сказать ей сформировать составную команду как связанное значение C-q
ключа.
Так что же происходит, когда мы хотим, чтобы tmux делал это из оболочки? Много побега.
$ tmux bind-key -n C-q new-session "monitor1" \\\; split-window -v "monitor2"
Во- первых, мы должны спасаясь от \
и;
каждый из оболочки , в результате чего оболочка пройти два символа в \;
качестве аргумента tmux
. Затем он экранируется ;
от tmux, заставляя его назначить весь составной оператор в качестве привязки C-q
.
Теперь, все это говорит, что если вы будете использовать сложную настройку tmux, как это неоднократно, я бы предложил вам создать файл tmux, чтобы сохранить его:
# In split-windows.tmux:
new-session "monitor1"
split-window -v "monitor2"
bind-key -n C-s new-window "monitor4"
# ...etc...
А потом:
$ tmux source split-windows.tmux # (or even make an alias for this)
Так будет легче поддерживать.
\;
:$ tmux bind-key -n C-q new-session "monitor1" '\;' split-window -v "monitor2"
Таким образом, настоящий ответ таков: вы объединяете команды с обратной косой чертой, за которой следует точка с запятой.
Вы должны поместить это в свой tmux.conf или запустить из командной строки tmux ":"
источник
Вы можете сделать это с помощью небольшого обходного пути. Подобно ответу, предлагающему запустить скрипт (который хорошо обрабатывает ваш случай), в более общем случае это можно сделать, используя «run-shell» и вызывая сам tmux в качестве команды оболочки.
который отправит ключи 'xyz', команду tmux 'clear-history', а затем вызовет встроенную оболочку 'clear'.
Вся строка представляет собой последовательность команд из нескольких оболочек.
источник
Вы можете добавить что-то вроде этого к привязкам клавиш в вашем
.tmux.conf
файле:И у
tmux-new-session.sh
вас может быть:источник
Все показанное здесь не будет работать, потому что это
выполнит команду command2 немедленно, а q будет привязан только к send-keys "command1"
Вот решение:
В файле ~ / .tmux / reload.tmux поместите несколько команд, например:
источник