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

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

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

#1 楼

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重新加入-可能需要一些默认参数才能将其放回原位,或者稍后再重新排列。

请注意,join-pane在tmux 1.3中似乎存在,但在1.1中却没有。 (不确定1.2,对不起)。

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

评论


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

–莫马拉
13-10-30在13:19

对于在更好的答案之前尝试过此操作的人,要使连接窗格正常工作,请执行以下操作:join-pane -t:{previous}用于上一个窗口,或join-pane -t:0将其连接回到窗口0。

–现实
18年1月12日在22:57

C-b-z是我认为大多数人都在寻找的答案。

–user1717828
20 Feb 16'0:51



#2 楼

现在,这是本机tmux的功能。

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


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


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

评论


太好了,只需将其添加到我的.tmux.conf中即可,现在体验更加流畅:bind-key z resize-pane -Z

– St-Ste-Ste-Stephen
2014年8月5日下午13:23

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

–lkraav
16-2-21在23:15

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

– Mateusz Piotrowski
16年4月2日在20:37

太棒了它实际上有效

–sayem siam
19年2月5日在16:38

@lkraav请参阅更改缩放窗格的Tmux背景颜色。

–卡米尔·马乔洛夫斯基(Kamil Maciorowski)
19年7月30日在9:30

#3 楼

所以我知道你前一段时间问过这个问题...但是直到今天我才从屏幕上切换!

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

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


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

评论


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

–瑞安
2011年11月15日在20:22

知道如何将相同的击键映射到两者吗?诸如bind c-m select-window -t tmux-zoom之类的东西? <最小化>:<最大化>。但是现在为了简洁起见,我想在其他地方定义此函数,并只绑定c-m:max_or_min。那可能吗?我发现很难搜索。 (我发现我经常会打错命令,并最终创建其他空的“ tmux-zoom”窗口。)

–chad​​oh
2012年4月3日13:44



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

–Epeli
2012年4月8日18:32

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

–天堂
2012年4月15日在11:53

这种工作,但是我几乎失去了布局。

–约翰·亨特
2012年7月4日在10:23

#4 楼

改进的变焦器。现在,可以缩放多个窗格,甚至可以缩放。完成以下操作并重新加载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/^[^:]*: *\([^ ]*\) .*//gp'`;
currentpane=`tmux list-panes | sed -n -e '/(active)/s/^\([^:]*\):.*//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


评论


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

– sillyMunky
2012年8月27日10:49

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

–armandino
2012年11月8日下午6:07

我同意。这行得通,而且很棒。屏幕++

–布拉德公园
13 Mar 6 '13 at 3:28



+1。这很好用,但至少比我的@Ryan的答案慢了几分之一秒(约0.8秒)。没什么大不了的,但我想知道是否有办法使其更快

–阿梅里奥·巴斯克斯·雷纳(Amelio Vazquez-Reina)
2013年3月6日15:55



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

– Eric O Lebigot
2013年6月9日14:26

#5 楼

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

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

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

#6 楼

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

tmux前缀+ z

通常是:

Ctrlb + z

#7 楼

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

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"


#8 楼

对我来说,也没有“清除&&回显TMUX ZOOM &&阅读”的工作。每次使用此代码片段时,我将从第一个窗口最小化的一个窗格消失。

#9 楼

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
 


#10 楼

对于那些无法使用tmux 1.8或更喜欢更长的最大化状态的用户,我发布了一个可与tmux 1.6+一起使用的tmux脚本。

希望有所帮助。

#11 楼

我在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时,我还没有损坏任何东西。

#12 楼

对于较旧版本的tmux,此解决方案是我发现的唯一可行的解​​决方案:

https://github.com/jipumarino/tmux-zoom