在 tmux 中“最大化”窗格

Iva*_*van 280 tmux

有时在 tmux 中最大化窗格然后将其恢复到以前的大小会非常有用。

我一直在阅读手册,但找不到方法。我想出的是,我可以绑定一个键来将窗格调整为“最大”宽度,另一个键将其恢复到某个预定义的宽度。

当然这有它的缺点,所以我想知道是否有人有更好的主意。

Tyl*_*ien 532

这现在是本机 tmux 功能。

1.8 版-Zresize-pane. 从手册页:

使用 -Z,活动窗格在缩放(占据整个窗口)和未缩放(其在布局中的正常位置)之间切换。

它绑定到tmux-prefix-z默认情况下在我的安装中(通过 OS X 上的 Homebrew)。

  • 这很棒,刚刚添加到我的 .tmux.conf 中,现在有了更流畅的体验:bind-key z resize-pane -Z (4认同)

Ham*_*ner 78

tmux 1.8 及更高版本

现在本地支持,来自以下答案

1.8 版在调整大小窗格中添加了 -Z 标志。从手册页:

使用 -Z,活动窗格在缩放(占据整个窗口)和未缩放(其在布局中的正常位置)之间切换。

较旧的 tmux(原始答案)

另一种选择是使用break-pane后跟join-pane. 从手册页

break-pane [-d] [-t target-pane]
                   (alias: breakp)
             Break target-pane off from its containing window to make it the
             only pane in a new window.  If -d is given, the new window does
             not become the current window.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]
                   (alias: joinp)
             Like split-window, but instead of splitting dst-pane and creating
             a new pane, split it and move src-pane into the space.  This can
             be used to reverse break-pane.
Run Code Online (Sandbox Code Playgroud)

所以你可以选择你的窗格然后做break-pane,然后一旦你完成了最大化的版本,你可以重新加入它join-pane- 可能需要一些默认参数将它放回原位,或者之后重新排列。

请注意,join-pane 似乎在 tmux 1.3 中,但不在 1.1 中。(不确定 1.2,抱歉)。

顺便提一下,终结器(基于 GUI(基于 GTK)的终端多路复用器)可以进行缩放。(Ctrl-Shift-X 是默认的键绑定)。当然,它并没有做 tmux 所做的很多事情......

  • 从 1.8 版开始,有一个更好的解决方案(请参阅 Tyler Holien 的回答)。 (35认同)
  • `Cb`-`z` 是我认为大多数人都在寻找的答案。 (9认同)

小智 49

所以我知道你之前问过这个问题......但我直到今天才从屏幕切换!

我遇到了同样的问题,这是我解决的方法:

unbind +
bind + new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \; swap-pane -s tmux-zoom.0 \; select-window -t tmux-zoom
unbind -
bind - last-window \; swap-pane -s tmux-zoom.0 \; kill-window -t tmux-zoom
Run Code Online (Sandbox Code Playgroud)

如果您的工作流程和我的一样(即您最大化一个窗口,做一些工作,然后立即取消最大化),这应该对您很有用。

  • 仅当我从最大化中删除“clear && echo TMUX ZOOM && read”时,这才对我有用。 (7认同)
  • 知道如何将相同的击键映射到两者吗?像`bind cm select-window -t tmux-zoom 这样的东西?<最小化> : <最大化>`。但现在我想在其他地方定义这个函数,为了干净起见,只需`bind cm :max_or_min`。那可能吗?我发现很难搜索。(我发现我经常点击错误的命令并最终创建额外的、空的“tmux-zoom”窗口。) (2认同)

小智 27

改进的缩放器。现在可以缩放多个窗格,甚至可以分层缩放。执行以下操作并重新加载您的 tmux 服务器(在我的情况下为 Ctrl-r)后,您将x绑定您的密钥以放大和缩小窗格。放大是通过在新窗口中打开窗格来实现的,缩小是通过将窗格返回到其原始窗口来实现的。如果您最终拆分放大窗口,您将能够放大放大窗口的窗格并缩小回到放大窗口。只有在包含单个窗格的放大窗口中才会发生缩小。

将以下内容添加到您的末尾 ~/.tmux.conf

~$ grep "bind x" ~/.tmux.conf
unbind x
bind x run ". ~/.tmux/zoom"
Run Code Online (Sandbox Code Playgroud)

添加以下文件

~$ cat ~/.tmux/zoom
#!/bin/bash -f
currentwindow=`tmux list-window | tr '\t' ' ' | sed -n -e '/(active)/s/^[^:]*: *\([^ ]*\) .*/\1/gp'`;
currentpane=`tmux list-panes | sed -n -e '/(active)/s/^\([^:]*\):.*/\1/gp'`;
panecount=`tmux list-panes | wc | sed -e 's/^ *//g' -e 's/ .*$//g'`;
inzoom=`echo $currentwindow | sed -n -e '/^zoom/p'`;
if [ $panecount -ne 1 ]; then
    inzoom="";
fi
if [ $inzoom ]; then
    lastpane=`echo $currentwindow | rev | cut -f 1 -d '@' | rev`;
    lastwindow=`echo $currentwindow | cut -f 2- -d '@' | rev | cut -f 2- -d '@' | rev`;
    tmux select-window -t $lastwindow;
    tmux select-pane -t $lastpane;
    tmux swap-pane -s $currentwindow;
    tmux kill-window -t $currentwindow;
else
    newwindowname=zoom@$currentwindow@$currentpane;
    tmux new-window -d -n $newwindowname;
    tmux swap-pane -s $newwindowname;
    tmux select-window -t $newwindowname;
fi
Run Code Online (Sandbox Code Playgroud)

  • 只有一个赞?!这个答案太棒了!效果很好,引入了不错的新功能,现在完全取代了我以前使用的臃肿的“终结者”程序。 (4认同)

alp*_*989 22

Ctrl+ b(前缀)+z用于放大tmux 2.1. 如果您再次按Ctrl+ b+ z,它会将窗格缩放回原始大小。它不会创建新窗格。

与 aksay 上面发布的解决方案相比,如果您尝试拆分放大的窗格,它将不允许拆分,而是会返回到原始窗格并拆分该窗格。

缩放窗口选项可能更通用......


You*_*f4k 11

现在,有一个默认的快捷方式:

tmux-prefix+z

这通常是:

Ctrlb+z