如何发送命令到tmux中的所有窗格?

我喜欢打电话:clear-history在带有巨大回滚的窗格上:clear-history 。 但是,我想脚本的方式发送这个命令到各窗口中的所有窗格。

我知道如何向所有的窗口发送一个命令,但是我怎样才能把命令发送到所有的窗口?

send-keyssynchronize-panes从tmux手册页浮现,但我不知道如何将它们结合在一起。 但也许有一个更简单的方法来做到这一点。

额外观察:

考虑到这一点, tmux list-panes -a似乎列出了当前会话中的所有窗格。 相当有用的开始。 我从哪里出发?

你有没有尝试跟多个窗格的tmux窗口

 Ctrl-B : setw synchronize-panes on clear history 

晚了一点,但我不想设置和取消设置同步窗格只是为了发送一个命令,所以我创build了一个包装函数tmux周围,并添加了一个自定义函数称为send-keys-all-panes

 _tmux_send_keys_all_panes_ () { for _pane in $(tmux list-panes -F '#P'); do tmux send-keys -t ${_pane} "$@" done } 

我还创build了一个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命令,只需用一个参数replace该元素,例如。 $ 1 如果您打算编写脚本来处理一系列的tmux命令,请小心,因为“-t $ {_ pane}”将需要应用于每个命令。

请注意, tmux list-panes-a参数需要覆盖所有会话中所有窗口中的所有窗格。 没有这一点,只有当前tmux窗口中的窗格将受到影响。 如果您打开了多个tmux会话,并且只想将该命令应用于当前会话中的窗格,请将-areplace为-s (全部在tmux手册页中)。

我没有模块直接评论上述每个答案,所以这就是为什么他们不为我工作:

我在@ shailesh-garg的回答中遇到的问题是,同步只影响在窗格内发出的命令,而不是在窗格之外使用Ctrl-B :发出的tmux命令。

我在@kshenoy的回答中遇到的三个问题是:

  1. 它发送击键到一个窗格内,而不是该窗格的tmux操作,所以例如,如果有一个在窗格中运行的bash shell,并且使用脚本发送“清除历史logging”,则这些将是会出现在bash命令行中。 解决方法是发送“tmux清除历史logging”或将“tmux”预先设置为“$ @”,但是由于其他问题,我没有编辑答案。
  2. 我无法弄清楚如何发送一个新的字符,而不是字面上的断行;
  3. 即使这样做,发送“tmux清除历史logging”也没有效果。