如何让tmux窗格按创建顺序自动排序?
解决方案:实现tmux窗格3x3按创建顺序横向排列
当然可以自动实现这种布局,你原来的脚本用垂直分割(split-window -v)的方式没法得到想要的横向每行三格的排列,需要调整分割的顺序和方向,先横向分割出每行的窗格,再纵向分割出下一行的位置。
完整脚本示例
#!/bin/bash PROGRAM_NAME="<ProgramName>" SESSION_NAME="peers" # 创建后台会话,初始窗格0 tmux new -s "$SESSION_NAME" -d # 第一行:横向分割两次,得到窗格1、2 tmux split-window -h -t "$SESSION_NAME" # 分割窗格0,得到右侧的窗格1 tmux split-window -h -t "$SESSION_NAME" # 分割窗格1,得到右侧的窗格2 # 第二行:选中窗格0,纵向分割得到下方的窗格3,再横向分割出4、5 tmux select-pane -t "$SESSION_NAME":0 tmux split-window -v -t "$SESSION_NAME" tmux split-window -h -t "$SESSION_NAME":3 tmux split-window -h -t "$SESSION_NAME":4 # 第三行:选中窗格3,纵向分割得到下方的窗格6,再横向分割出7、8 tmux select-pane -t "$SESSION_NAME":3 tmux split-window -v -t "$SESSION_NAME" tmux split-window -h -t "$SESSION_NAME":6 tmux split-window -h -t "$SESSION_NAME":7 # 给每个窗格发送启动命令 for pane in {0..8}; do tmux send-keys -t "$SESSION_NAME":"$pane" "$PROGRAM_NAME" C-m done # 应用tiled布局确保窗格对齐 tmux select-layout -t "$SESSION_NAME" tiled # 连接会话 tmux attach -t "$SESSION_NAME"
脚本说明
- 先通过
split-window -h(横向分割)创建第一行的三个窗格(0、1、2) - 回到第一个窗格,用
split-window -v(纵向分割)创建第二行的起始窗格3,再横向分割出4、5 - 回到窗格3,纵向分割出第三行起始窗格6,再横向分割出7、8
- 最后循环给每个窗格发送启动命令,确保按创建顺序0-8对应到你想要的位置
备选方案:自定义布局参数
如果你已经创建了所有9个窗格,也可以通过指定自定义布局来强制排列。先完成所有窗格创建后,执行:
tmux select-layout -t peers 'even-horizontal,3x3,0,0{154x43,0,0,0,154x43,0,44,1,154x43,0,88,2}{154x43,0,132,3,154x43,0,176,4,154x43,0,220,5}{154x43,0,264,6,154x43,0,308,7,154x43,0,352,8}'
注意:这个布局参数是基于特定终端尺寸生成的,不同终端大小需要调整数值,所以手动控制分割顺序的方法更通用可靠。
内容的提问来源于stack exchange,提问作者TheBaum
相关产品推荐
相关产品推荐

