“最大化” tmux中的窗格


238

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

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

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

Answers:


54

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.

因此,您可以选择窗格并执行此操作break-pane,然后在完成最大化版本后,可以将其重新加入join-pane-可能需要一些默认参数才能将其放回原位,或者仅在之后进行重新排列。

请注意,连接窗格似乎在tmux 1.3中,而不在1.1中。(不确定1.2,抱歉)。

只需提一下终结器(GUI(基于GTK)终端多路复用器)就可以完成缩放任务。(Ctrl-Shift-X是默认的键盘绑定)。当然,它并没有做很多tmux做的事情...


32
从1.8版开始,有一个更好的解决方案(请参阅Tyler Holien的答案)。
momeara 2013年

1
对于那些在更好的答案之前尝试过此方法的人,要使加入窗格起作用,请执行以下操作:join-pane -t:{previous}对于上一个窗口或join-pane -t:0将其重新加入窗口
现实的

487

现在,这是本机tmux功能。

在1.8版中,该-Z标志增加了resize-pane。从手册页:

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

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


4
太好了,只需将其添加到我的.tmux.conf中即可,现在体验更加流畅:绑定键z调整大小窗格-Z
St-Ste-Ste-Stephen

是否可以某种方式使浸入式玻璃板的边缘可见以指示深度?我忘了放大,而“ Z-title”还不够突出。
lkraav '16

开箱即用,可在BunsenLabs中工作。
Mateusz Piotrowski

太棒了 它的实际工作
sayem暹


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

如果您的工作流程像我的(例如,您最大化一个窗口,做一些工作,然后立即取消最大化),那么这对您将非常有用。


(以防万一,在原始窗口中保留布局...在最大化和非最大化之后,它是完全相同的。)
Ryan

2
知道如何将相同的击键映射到两者吗?有点像bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>。但是现在我想在其他地方定义此功能,以保持整洁,并且公正bind c-m :max_or_min。那可能吗?我发现很难搜索。(我发现我经常会打错命令,并最终创建其他空的“ tmux-zoom”窗口。)
chadoh 2012年

7
仅当我从最大化中删除“ clear && echo TMUX ZOOM && read”时,这才对我有用。
Epeli 2012年

最大化对我有用,但是最小化动作只会杀死原始窗口,留下最大化窗格。
paradroid

这种工作,但是我几乎失去了布局。
约翰·亨特

25

改进的变焦器。现在,可以缩放多个窗格,甚至可以缩放。完成以下操作并重新加载tmux服务器(在我的情况下为Ctrl-r)后,您将必须具有x放大和缩小窗格的键。放大是通过在新窗口中打开窗格来实现的,而缩小是通过使窗格回到其原始窗口来实现的。如果最终分割了放大窗口,则可以放大到放大窗口的窗格,然后缩小回到放大窗口。仅当您在包含单个窗格的放大窗口中时,才会发生缩小。

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

~$ grep "bind x" ~/.tmux.conf
unbind x
bind x run ". ~/.tmux/zoom"

添加以下文件

~$ 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

4
只有一个投票?!这个答案真棒!效果很好,引入了不错的新功能,现在完全取代了我以前使用的庞大的“终止程序”程序。
sillyMunky 2012年

+1这真的很好!到目前为止,我遇到过的最好的解决方案!谢谢!!
armandino

我同意。这行得通,而且很棒。屏幕++
布莱德·帕克斯

+1。效果很好,但至少比我的@Ryan的答案慢了几分之一秒(约0.8秒)。没什么大不了的,但是我想知道是否有一种方法可以使它更快
Amelio Vazquez-Reina 2013年

确实美丽。我喜欢特殊的窗格名称(zoom @…),它们是有用的提醒,以及单个“ x”放大/缩小命令。
Eric O Lebigot

16

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

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

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


2

我这样做是为了通过相同的按键来最大化/最小化:

bind C-k run "if [[ $(tmux list-window) =~ ZOOM ]]; then tmux last-window; tmux swap-pane -s ZOOM.1; tmux kill-window -t ZOOM; else tmux new-window -d -n ZOOM; tmux swap-pane -s ZOOM.1; tmux select-window -t ZOOM;fi"

1

对我来说,也没有“清除&&回声TMUX ZOOM &&阅读”的工作。每当我最小化一个片段时,第一个窗口就会消失。


1

resize-pane -Z切换的问题在于,有时它会执行超出期望的反向缩放操作,尤其是从脚本或内部调用时tmux.conf

解决方法如下:

tmux-zoom-in.sh

#!/bin/bash

# Zoom in the current pane ONLY if it is not currently zoomed.
# Requires tmux version >= 1.8

tmux list-panes -F '#F' | grep -q Z || tmux resize-pane -Z

tmux-zoom-out.sh

#!/bin/bash

# Zoom out the current pane ONLY if it is not currently zoomed.
# Requires tmux version >= 1.8

tmux list-panes -F '#F' | grep -q Z && tmux resize-pane -Z

1

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

tmux-prefix+z

通常是:

Ctrlb+z



0

我在Ubuntu 12.04上,也需要此功能。从tmux 1.8开始,原生支持使用tmux-prefix z进行缩放切换。由于我们可能不会在12.04中看到tmux 1.8,因此我在另一台开发计算机上从源代码编译了tmux 1.8,将其重命名为_tmux-1.8,然后将1.8二进制文件复制到/usr/bin/_tmux-1.8并编辑了.bash_aliases->别名。 tmux ='_ tmux-1.8'。

我没有注意到使用此快速又肮脏的方法有任何问题,当/如果tmux 1.8达到12.04,我还没有损坏任何东西。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.