tmuxのペインの「最大化」


239

tmuxでペインを最大化し、以前のサイズに復元することが非常に役立つ場合があります。

私はマニュアルを読んでいますが、方法が見つかりません。私が思いついたのは、ペインを「最大」幅にサイズ変更するキーと、事前定義された幅に復元する別のキーをバインドできることです。

もちろんこれには欠点があるので、誰かがもっと良いアイデアを持っているかどうか疑問に思っています。

回答:


56

tmux 1.8以降

以下の回答から、ネイティブにサポートされるようになりました

バージョン1.8では、サイズ変更ペインに-Zフラグが追加されました。manページから:

-Zを使用すると、アクティブペインはズーム(ウィンドウ全体を占める)とズーム解除(レイアウト内の通常の位置)の間で切り替わります。

古いtmux(元の回答)

別のオプションは、を使用するbreak-paneことjoin-paneです。manページから:

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が行うことの多くは行いません...


32
バージョン1.8では、より良いソリューションがあります(Tyler Holienの回答を参照)。
momeara

1
より良い答えの前にこれを試す人のために、結合ペインを機能させるにはjoin-pane -t:{previous}、前のウィンドウに対して、またはjoin-pane -t:0ウィンドウ0に結合し直します
現実的な

488

これは現在、ネイティブtmux機能です。

バージョン1.8では、に-Zフラグが追加されましたresize-pane。manページから:

-Zを使用すると、アクティブペインはズーム(ウィンドウ全体を占める)とズーム解除(レイアウト内の通常の位置)の間で切り替わります。

バインドされているtmux-prefix- zデフォルトでは、私のインストール(OS XのHomebrew経由)。


4
これは素晴らしく、ちょうど.tmux.confに追加され、今でははるかに滑らかな体験ができます:bind-key z resize-pane -Z
St-Ste-Ste-Stephen 14

深さを示すために、何らかの方法で水中のペインのエッジを表示することは可能ですか?ズームインしていることを忘れてしまいますが、「Zタイトル」はあまり目立ちません。
lkraav

BunsenLabsですぐに使用できます。
マテウスピオトロ

驚くばかり。それは実際に動作する
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

ワークフローが私のものに似ている(つまり、ウィンドウを最大化し、作業を行ってから、すぐに最大化を解除する)場合、これはうまくいくはずです。


(明確でない場合、これは元のウィンドウのレイアウトを維持します...最大化と最大化解除後はまったく同じです。)
ライアン

2
同じキーストロークを両方にマッピングする方法はありますか?のようなものbind c-m select-window -t tmux-zoom ? <minimize> : <maximize>。しかし、今、私はこの関数をどこか別の場所に定義したいと思っていますbind c-m :max_or_min。それは可能ですか?検索するのが難しいと感じています。(よく間違ったコマンドを
押して

7
これは、「clear && echo TMUX ZOOM && read」を最大化から削除した場合にのみ機能しました。
エペリ

最大化は機能しますが、最小化アクションは元のウィンドウを強制終了し、最大化されたペインを残します。
パラドロイド

この種のは働いたが、私は私のレイアウトを失います。
ジョンハント

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

+1これは本当に良いです!今まで出会った中で、これまでで最高の実用的なソリューションです!ありがとう!!
アルマンディーノ

私は同意します。これは機能し、素晴らしいです。画面++
ブラッドパークス

+1。これはうまく機能しますが、少なくとも私のシステムでは、@ Ryanの上記の回答よりもほんの一瞬(〜0.8秒)遅くなります。大したことではありませんが、もっと速くする方法があるのではないかと思います
アメリオバスケス-レイナ

本当に美しい。便利なリマインダーである特別なペイン名(zoom @…)と、単一の「x」ズームイン/アウトコマンドが大好きです。
エリックOレビゴ

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ズーム&&読み取り」なしで作業します。このスニペットでは、最初のウィンドウから1つのペインを最小化するたびに消えます。


1

resize-pane -Zトグルであることに伴う問題は、特にスクリプトまたはinsideから呼び出された場合に、必要に応じて逆ズーム操作を実行する場合があること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-> aliasを編集しましたtmux = '_ tmux-1.8'。

この迅速でダーティな方法を使用しても問題はありませんし、tmux 1.8が12.04になったときは何も壊れていません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.