当我有三个窗格时,我可以轻松地使用此布局C-b, M-4
-----------
| | 2 |
| 1 |-----|
| | 3 |
-----------
我经常希望得到这样的结果:
-----------
| 2 | |
|-----| 1 |
| 3 | |
-----------
请注意,这C-b, M-4
将适用于三个以上的窗格:所有其他窗格将垂直堆叠在右侧。但我更希望它们堆叠在左侧。
我怎样才能用一个命令做到这一点?
答案1
我不知道如何镜像任意布局,但这并不C-b, M-4
难。
绑定到的 tmux 命令C-b, M-4
是select-layout main-vertical
。
为了获得main-vertical
您想要的布局,我们需要执行以下操作:
- 在右侧创建一个横跨整个窗口高度的新窗格。
- 将新窗格与最左边的窗格交换。
- 销毁最左边的窗格。
这是我的实现(在 tmux 内的 shell 中运行):
tmux select-layout main-vertical \;\
split-window -dhf '' \;\
swap-pane -d -s {right} -t {left} \;\
kill-pane -t {left}
上述代码将第一个图表转换为第二个图表。它还适用于右侧垂直堆叠的更多窗格。它可以合理地与任何布局配合使用并main-vertical
从中创建镜像。
我注意到select-layout main-vertical
的是幂等,但上面的代码不是。如果我们的命令有一个幂等版本就好了。就是这样:
tmux rotate-window -D \;\
select-pane -t {next} \;\
select-layout main-vertical \;\
split-window -dhf '' \;\
swap-pane -d -s {right} -t {left} \;\
kill-pane -t {left}
但它并没有准确地将您的第一个图表转换为第二个图表,窗格的顺序是不同的。
一般来说,当与普通的 交替使用时,这些都表现不佳select-layout main-vertical
;我的意思是,当您来回转换时,大窗格不是同一个窗格。请注意,select-layout main-vertical
总是使左上角的窗格变大,因此它根本无法将您的第二个图表转换为第一个图表。为了解决这个问题,我们需要一些逻辑,不仅在我们的代码中,而且作为 的替代品select-layout main-vertical
。
如果我是你,我会使用第一个代码片段。它比另一个更简单,并且可以很好地将第一个图表转换为第二个图表。幂等性并不那么重要;一旦你得到了想要的布局,你就不需要再次应用它了。
对于我来说Shift+4发送$
。要将我们的第一个 tmux 命令绑定到prefix Alt+ Shift+,4我将其放入我的~/.tmux.conf
:
bind-key -T root M-\$ select-layout main-vertical \; split-window -dhf '' \; swap-pane -d -s \{right\} -t \{left\} \; kill-pane -t \{left\}