如何发送命令到tmux中的所有窗格?
我喜欢打电话:clear-history
在带有巨大回滚的窗格上:clear-history
。 不过,我想编写一个方法将此命令发送到各个窗口中的所有窗格。
我知道如何向所有的窗口发送一个命令,这个问题可以提供,但是我怎样向所有的窗口发送一个命令呢?
send-keys
和synchronize-panes
来自tmux手册页,但我不知道如何将它们结合在一起。 但也许有一个更简单的方法来做到这一点。
额外观察:
考虑到这一点, tmux list-panes -a
似乎列出了当前会话中的所有窗格。 非常有用的开始。 我从哪里出发?
您是否尝试过在多窗格的tmux窗口中执行下列操作
Ctrl-B :
setw synchronize-panes on
clear history
有点迟到派对,但我不想设置和取消设置同步窗格只是为了发送一个命令,所以我创建了一个围绕tmux的包装函数,并添加了一个名为send-keys-all-panes
panes的自定义函数。
_tmux_send_keys_all_panes_ () {
for _pane in $(tmux list-panes -F '#P'); do
tmux send-keys -t ${_pane} "$@"
done
}
我还为tmux命令创建了一个包装器,以简化调用此函数(为了方便起见)。 包装和上面的代码都在这里。
这允许我运行tmux send-keys-all-panes <command>
tmux skap <command
tmux send-keys-all-panes <command>
或tmux skap <command
将<command>
发送到所有窗格。
请注意,tmux别名为我的包装函数tmux_pp。
上面的答案都不适用于我(tmux v2.3),但这是从bash命令行执行的:
for _pane in $(tmux list-panes -a -F '#{pane_id}'); do
tmux clear-history -t ${_pane} ; done
对于'clear-history'以外的其他tmux命令,更广泛的脚本只是用一个参数替换该元素,例如。 $ 1 如果您打算编写脚本来处理一系列tmux命令,请小心,因为需要将“-t $ {_ pane}”应用于每个命令。
请注意, tmux list-panes
的-a
参数需要覆盖所有会话中所有窗口中的所有窗格。 没有这些,只有当前tmux窗口中的窗格才会受到影响。 如果您打开了多个tmux会话并且只想将该命令应用于当前会话中的窗格,请将-a
替换为-s
(全部在tmux手册页中)。
我没有模块直接评论上述每个答案,所以这里是他们为什么不为我工作:
我在@ shailesh-garg的回答中遇到的问题是,同步仅影响窗格内发出的命令,而不影响窗格外部发出的使用Ctrl-B :
发出的tmux命令。
我在@kshenoy的回答中遇到的三个问题是:
上一篇: How to send a command to all panes in tmux?
下一篇: How to copy and paste between different tmux panes running vim instances