【问题标题】:How to bind a key to send shell commands (e.g. "source ~/.bashrc") to all tmux panes in all windows in a tmux session?如何绑定一个键以将 shell 命令(例如 \"source ~/.bashrc\")发送到 tmux 会话中所有窗口中的所有 tmux 窗格?
【发布时间】:2023-01-31 14:01:34
【问题描述】:

场景:我编辑~/.zshrc,我想在我的所有 tmux 窗格、所有窗口和给定会话中获取它。我想在任何窗格中使用键绑定来执行此操作。

我试着查看How to send a command to all panes in tmux?,它使用了setw synchronize-panes on,然后运行了一个 tmux ex 模式命令;但我想运行source $HOME/.zshrc,(一个 shell 命令),但我对如何做到这一点感到有点困惑。

我希望它是一个可以放入.tmux.conf 的键绑定,这样我只需要按前缀 + <key_combo>执行此操作,然后一切恢复到我运行此操作之前的状态(例如,我不必担心取消设置命令设置的任何 tmux 选项)

【问题讨论】:

    标签: shell zsh tmux


    【解决方案1】:

    这对你有用:

    # send "source ~/.bashrc<Enter>" to all panes in *current* session
    bind  B  run 'panes=`tmux list-panes -s -F "##{pane_id}"`; 
                  for pane in $panes; do 
                    tmux send -t $pane "source ~/.bashrc" Enter; 
                  done'
    
    # send "source ~/.zshrc<Enter>" to all panes in *current* session
    bind  Z  run 'panes=`tmux list-panes -s -F "##{pane_id}"`; 
                  for pane in $panes; do 
                    tmux send -t $pane "source ~/.zshrc" Enter; 
                  done'
    

    【讨论】:

    • 谢谢回复;这很好用,除了在另一个进程的窗格中,例如vim,正在运行(对于 vim 窗格,它运行“s”命令(替换 1 个字符),然后输入 ource ~/.zshrc,并按预期保持插入模式)。 vim 通常是我在会话的窗格中运行的唯一长期进程;有没有办法检查窗格中的前台进程是 zsh,还是不是 vim(对于更窄的情况),并且只在这些窗格中运行此命令?
    • 这在评论中不容易得到回答。请问一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2013-04-25
    • 2022-01-23
    • 1970-01-01
    • 2012-03-24
    • 2012-01-21
    • 2018-06-08
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多