Мне нравится звонить :clear-history
по панелям с огромным прокруткой. Однако я хочу написать способ отправки этой команды на все панели в различных окнах.
Я знаю, как отправить команду всем окнам, благодаря этому вопросу , но как мне отправить команду на все панели того или иного окна?
send-keys
и synchronize-panes
из man-страницы tmux приходят на ум, но я не знаю, как их объединить. Но, возможно, есть более простой способ сделать это.
Дополнительные наблюдения:
Думая об этом немного, tmux list-panes -a
кажется, перечислить все панели в текущем сеансе. Довольно полезно начать с. Куда мне идти отсюда?
Ответы:
Вы пробовали следовать в окне Tmux с несколькими панелями
источник
Ctrl-b :setw synchronize-panes off
~/.tmux.conf
, добавив:bind -n C-x setw synchronize-panes on
иbind -n M-x setw synchronize-panes off
on/off
. Итакbind -n C-x setw synchronize-panes
bind -n C-x setw synchronize-panes
какой короткий путь, я должен нажать, чтобы вызвать? Это префикс + C & X. Я перепробовал множество вариантовНемного опоздал на вечеринку, но я не хотел устанавливать и снимать синхронизирующие панели, просто чтобы послать одну команду, поэтому я создал функцию-оболочку для tmux и добавил пользовательскую функцию с именем
send-keys-all-panes
.Я также создаю оболочку для команды tmux, чтобы упростить вызов этой функции (для удобства). Оболочка и приведенный выше код все здесь .
Это позволяет мне запускать
tmux send-keys-all-panes <command>
илиtmux skap <command
отправлять<command>
на все панели.Обратите внимание, что tmux связан с моей функцией-оберткой tmux_pp.
источник
prefix + :
<prefix>:
?: run "yourscript.sh yourargs..."
); если ваша команда выводит, ваша активная или заданная панель будет отображать результаты, пока вы не нажмете q, но в этом случае это не должно быть. Конечно, вы можете псевдоним / привязать это по своему вкусу. Кроме того, внутренние процессы могут интерпретировать ваши нажатия клавиш или их влияние по-разному, поэтому#{pane_current_cmd}
может потребоваться белый или черный список . У меня есть Ctrl + K для отправки Ctrl + I и очистки истории; это прекрасно работает для оболочек, но забивает буфер Вима. Мне нужно будет уточнить, прежде чем я смогу транслировать свои Ctrl + K.<prefix>:
перед каждой командой, потери вывода после выхода из команды и всех ловушек, которые приходят с выполнением через Tmux. Например,<prefix>:run "man cat"
это не приводит к тому, что человек появляется в моем текущем пейджере для мужчиныpidof man
или дажеps auxf | grep man
«меньше».Обновление июнь 2019
Краткая иллюстрация о том, как настроить собственную привязку для синхронизации панелей .
Добавил следующее в мои
tmux.conf
(комментарии, безусловно, относятся к моей общей конфигурации):Теперь я могу включить возможность синхронизации команд на нескольких панелях
<C-a><C-y>
.(Да, я переназначил клавишу привязки на Ctrl a).
источник
Ни один из приведенных выше ответов не работал для меня (tmux v2.3), но это сработало из командной строки bash:
Более обобщенный скрипт для команд tmux, отличных от 'clear-history', просто заменит этот элемент параметром, например. $ 1. Будьте осторожны, если вы намереваетесь написать скрипт для обработки серии команд tmux, так как «-t $ {_ pane}» необходимо будет применить к каждой.
Обратите внимание, что
-a
параметр totmux list-panes
необходим для покрытия всех панелей во всех окнах во всех сеансах. Без этого будут затронуты только панели в вашем текущем окне tmux. Если у вас открыто более одного сеанса tmux и вы хотите применить команду только к панелям в текущем сеансе, замените-a
на-s
(Это все на странице руководства tmux).У меня нет модов, чтобы комментировать непосредственно каждый из приведенных выше ответов, поэтому вот почему они не работают для меня:
Проблема, с которой я столкнулся при ответе @ shailesh-garg, заключалась в том, что синхронизация затрагивала только команды, выдаваемые в пределах панелей, а не команды tmux,
Ctrl-B :
выполняемые с использованием которых находятся за пределами панелей.У меня были три проблемы с ответом @kshenoy:
источник
моя версия tmux 1.9a, и это работает для меня, одного ключа достаточно для включения и выключения
источник
Замените «идентификатор сессии» и «команду» соответственно.
источник
:D
чувак, вам нужно добавить описание к вашему ответу, так как в нем очень мало текста, и поэтому Stackoverflow обнаруживает его как спам или сообщение низкого качества, просто добавьте к нему некоторые детали, чтобы они не отображались под ним.Это моя служебная функция, которая выполняет это, только выполняя команду, когда на панели ничего не работает.
Пример, нацеленный на сеанс dev, включающий python virtualenv на всех панелях, которые находятся в
bash
илиzsh
, избегая выполнения команды в панелях с vim или любым другим исполняемым файлом:или проще запомнить: чтобы сделать это в текущем сеансе:
Найдите мой файл конфигурации с этой функцией.
источник