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

我喜欢打电话:clear-history在带有巨大回滚的窗格上:clear-history 。 不过,我想编写一个方法将此命令发送到各个窗口中的所有窗格。

我知道如何向所有的窗口发送一个命令,这个问题可以提供,但是我怎样向所有的窗口发送一个命令呢?

send-keyssynchronize-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的回答中遇到的三个问题是:

  • 它将窗口中的按键发送到窗格中,而不是发送到该窗格的tmux操作,例如,如果在窗格中运行了bash shell并且使用该脚本发送“清除历史记录”,则这些将是会出现在bash命令行中。 解决方法是发送“tmux clear-history”或将“tmux”预先设置为“$ @”,但由于答案中存在其他问题,我没有编辑答案;
  • 我无法弄清楚如何发送一个新的字符而不会真正地破坏这条线;
  • 即使我这样做,发送“tmux清除历史记录”也没有效果。
  • 链接地址: http://www.djcxy.com/p/86131.html

    上一篇: How to send a command to all panes in tmux?

    下一篇: How to copy and paste between different tmux panes running vim instances