如何为tmux绑定按键,向会话所有窗格发送shell命令?
在tmux所有窗格批量执行source ~/.zshrc的快捷键方案
核心实现
直接在~/.tmux.conf中添加以下快捷键绑定,就能通过任意窗格触发命令,自动在当前会话的所有窗口、所有窗格中重载.zshrc:
bind-key C-S-r run-shell 'tmux list-panes -s -F "#{session_id}:#{window_id}:#{pane_id}" | while read pane; do tmux send-keys -t "$pane" "source $HOME/.zshrc" C-m; done'
命令解释
bind-key C-S-r:将功能绑定到Ctrl+Shift+R,你可以替换成自己习惯的组合(比如M-r代表Alt+R,C-r代表Ctrl+R,注意避免和已有快捷键冲突)run-shell:让tmux执行后续的shell脚本逻辑tmux list-panes -s -F "#{session_id}:#{window_id}:#{pane_id}":列出当前会话(-s限定当前会话)下的所有窗格,输出格式包含会话、窗口、窗格的唯一标识while read pane; do ... done:遍历每一个找到的窗格tmux send-keys -t "$pane" "source $HOME/.zshrc" C-m:向指定窗格发送source $HOME/.zshrc命令,再发送回车(C-m模拟回车键)执行
额外说明
- 无需依赖
synchronize-panes,执行后不会修改tmux原有配置,完全不用手动恢复 - 如果需要对所有tmux会话的所有窗格执行命令,去掉
list-panes后的-s参数即可 - 若部分窗格处于非zsh环境(比如运行了编辑器、数据库cli等),发送的命令不会生效,这属于正常情况——
source仅在shell环境下有意义
内容的提问来源于stack exchange,提问作者Life5ign
相关产品推荐
相关产品推荐

