45

我意识到,一般来说,重塑窗格布局并非易事,但我对至少能够交换两个相邻窗格的布局感兴趣。

假设我将这些窗格布置成这样

 _____________
|    |        |
|    |   2    |
|    |________|
| 0  |        |
|    |        |
|    |        |
|    |   3    |
|____|        |
| 1  |        |
|____|________|

现在我发现我想要更多的垂直空间与窗格 3。考虑如何用窗格 0 或 1 重新排列它显然不是一件容易的事,但如果我能告诉 3 和 2 翻转拆分轴,那就太好了:

 _____________
|    |     |  |
|    |     |  |
|    |     |  |
| 0  |     |  |
|    |  3  |2 |
|    |     |  |
|    |     |  |
|____|     |  |
| 1  |     |  |
|____|_____|__|

(注意这里 tmux 很可能会重新排序,所以旧的 3 变成了新的窗格 #2)

目前,当我尝试运行join-pane -h以重新组织它时,它告诉我“无法将窗格加入自己的窗口”。是的,好吧,我只是想在不破坏整个布局的情况下对其进行洗牌。

我想一种解决方法是将其拆分为自己命名的窗口,然后立即将其重新加入,尽管它看起来无法确定切换到的方向(水平与垂直)。

请注意,这与交换两个窗格的位置的操作不同,其中存在一个可以使用的命令。我正在寻找交换分裂轴。

4

7 回答 7

68

前缀+空格绑定到next layout

于 2013-10-18T18:46:43.283 回答
28
# Here is a jewel of a bind which does the task of flipping the
# orientation of the current pane with the pane before it (in the
# ordering) -- I had a SO question on this and nobody answered.
bind -n M-f move-pane -t '.-'
bind M-f move-pane -t '.-'
bind -n M-r move-pane -h -t '.-'
bind M-r move-pane -h -t '.-'

评论是谎言,这个功能不直观,坦率地说很糟糕,但它确实在紧要关头工作。

更新:我已经更新了这个以删除-n我的配置中的绑定,基本上你确实希望保持打开通过 tmux“通过”击键的能力。例如,一段时间后,我希望在 Vim 中具有相同的功能,我将其绑定到相同的组合。


更新:可以在这里与出色的解决方案结合使用:https ://stackoverflow.com/a/70024796/340947

这使您可以抓住一个窗格并四处走动。使我的绑定过时了,但对于熟悉的行为,两者都可以保留(就像我会的那样)。如果您碰巧在第一个窗格上运行它,我真的不喜欢我的会做一些令人困惑的事情(在这种情况下,'.-' 会选择右下角的窗格)。

于 2014-12-12T19:35:12.063 回答
14

C-b space(默认绑定到下一个布局)通过可用布局循环

于 2017-11-12T17:37:26.423 回答
3
#flipping the orientation of the current pane with the pane <arrow-way>-of

    bind -n S-Up move-pane -h -t '.{up-of}'
    bind -n S-Right move-pane -t '.{right-of}'
    bind -n S-Left move-pane -t '.{left-of}'
    bind -n S-down move-pane -h -t '.{down-of}'

这是我的示例,仅以箭头的方式使用窗格更改选项按 Shift 和箭头键或根据需要重新绑定命令

于 2021-11-18T18:15:58.063 回答
2

如果您真的想完全按照您所说的去做,我建议您将窗格打开到一个新窗口,然后将其重新加入。

例如...

确保您有两个窗格之一处于活动状态并将其拆分:

字首break-pane

返回主窗口(前缀w)并在其余窗格上执行任何操作以使其成为您想要的布局

确保您的窗格处于活动状态,您希望另一个窗格与之相邻

确保窗口已命名(或指定的名称已知)

转到窗格被分解成的新窗口(w再次添加前缀)

join-pane -t <Main Window Name> -h(或者-v如果你想要垂直分割)

于 2015-02-02T17:37:30.163 回答
1

重申:

You have panes
laid out like
this:

 _____________                    _____________
|    |        |                  |    |     |  |
|    |   2    |                  |    |     |  |
|    |________|                  |    |     |  |
| 0  |        |   but you want   | 0  |     |  |
|    |        |   them to look   |    |  3  |2 |
|    |        |   like this:     |    |     |  |
|    |   3    |                  |    |     |  |
|____|        |                  |____|     |  |
| 1  |        |                  | 1  |     |  |
|____|________|                  |____|_____|__|

由于您知道所有窗格编号(尤其是要重新排列的窗格的窗格编号),因此简短的回答是键入:

CTRL+B :move-pane -s 3 -t 2 -h ENTER


但是,如果您不知道所有窗格编号,这里有一个重新定位窗格的简单方法:

  1. 如果您的鼠标支持尚未打开,请使用以下命令打开它:
    CTRL+B :set-option -g mouse on ENTER
  2. 使用鼠标单击要撕下的窗格- 即单击要重新定位到另一个窗格右侧或下方的窗格。(在您的示例中,这将是窗格 2,因为您想将其撕下并将其重新定位到窗格 3 的右侧。)
  3. 接下来,单击要附加/重新定位撕下窗格的窗格。(在您的示例中,这将是窗格 3,因为您希望将窗格 2 附加到它的右侧。)
  4. 最后,输入:
    CTRL+B :move-pane -s ! -h ENTER

解释:

  • 魔术主要发生在第 4 步,即-s !开关。它告诉tmux将您单击的倒数第二个窗格移动到您单击的最后一个窗格。
  • 第 4 步中的-h开关告诉tmux水平重新连接窗格 - 即右侧。如果您想将其附加在下方,请改用该-v开关,或-h完全不使用该开关。

笔记:

  • 这些步骤会将窗格 2 放置在窗格 3 的右侧。如果您希望窗格 2 位于窗格 3 的左侧,则只需将窗格 3 作为“撕下”面板,将窗格 2 作为面板运行这些步骤即可附在。(或者您可以交换面板;您可以通读man tmux以了解如何操作。)
  • 如果您通过 Unix shell 提示符运行第 4 步,请记住引用!,如下所示:
    tmux move-pane -s '!' -h
  • line:
    set-option -g mouse on
    是一个很好的放在~/.tmux.conf文件中的行,如果你还没有它的话。
  • 正如您上面所说,tmux 在您重新排序后分配新的窗格编号。
  • 要查看特定窗格的窗格编号,请单击您想要的页面(使其成为当前页面),然后键入:
    CTRL+B   i
    如果显示窗格编号的状态消息对您来说消失得太快,您可以延长它的时间可见:
    CTRL+B :set-option -g display-time 4000 ENTER
  • 要快速查看所有窗格的窗格编号/索引,请键入:
    CTRL+B   Q
    如果窗格编号对您来说消失得太快,您可以延长它们的可见时间:
    CTRL+B :set-option -g display-panes-time 4000 ENTER

于 2021-11-06T20:34:00.150 回答
0

结合你的前缀(通常crtl+b),然后space

当您有 2 个窗格时,它将在水平模式和垂直模式之间切换。

于 2021-12-20T19:12:24.030 回答