如何在 tmux 中垂直镜像布局?或者创建一个新布局?

如何在 tmux 中垂直镜像布局?或者创建一个新布局?

当我有三个窗格时,我可以轻松地使用此布局C-b, M-4

 -----------
|     |  2  |
|  1  |-----|
|     |  3  |
 -----------

我经常希望得到这样的结果:

 -----------
|  2  |     |
|-----|  1  |
|  3  |     |
 -----------

请注意,这C-b, M-4将适用于三个以上的窗格:所有其他窗格将垂直堆叠在右侧。但我更希望它们堆叠在左侧。

我怎样才能用一个命令做到这一点?

答案1

我不知道如何镜像任意布局,但这并不C-b, M-4难。

绑定到的 tmux 命令C-b, M-4select-layout main-vertical

为了获得main-vertical您想要的布局,我们需要执行以下操作:

  1. 在右侧创建一个横跨整个窗口高度的新窗格。
  2. 将新窗格与最左边的窗格交换。
  3. 销毁最左边的窗格。

这是我的实现(在 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\}

相关内容