Tmux'ta bir bölmeyi “maksimize etmek”


239

Bazen tmux'ta bir bölmeyi büyütmek ve daha sonra önceki boyutuna geri yüklemek çok yararlı olabilir.

Kılavuzu okuyordum ve bir yol bulamıyorum. Karşılaştığım, bölmeyi "max" genişliğe yeniden boyutlandırmak için bir anahtar, önceden tanımlanmış genişliğe geri yüklemek için başka bir anahtar bağlamak olabilir.

Elbette bunun sakıncaları var, bu yüzden birinin daha iyi bir fikri olup olmadığını merak ediyorum.

Yanıtlar:


56

tmux 1.8 ve üstü

Şimdi yerel olarak destekleniyor, aşağıdaki cevaptan :

Sürüm 1.8, yeniden boyutlandırmak için -Z bayrağının eklendiğini gördü. Man sayfasından:

-Z ile, aktif panel yakınlaştırılır (pencerenin tamamını kaplar) ve çevrilmemiş (düzendeki normal konumu) arasında geçiş yapar.

eski tmux (orijinal cevap)

Diğer bir seçenek bunu break-panetakip etmek olabilir join-pane. Gönderen adam sayfası :

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.

Böylece bölmenizi seçip yapabilir break-paneve daha sonra büyütülmüş sürümle işiniz bittiğinde, tekrar birleştirebilirsiniz join-pane- yerine koymak için bazı varsayılan argümanlara gerek duyulabilir veya daha sonra yeniden düzenlenebilir.

Birleştirme bölmesinin tmux 1.3'te göründüğünü, ancak 1.1 olmadığını unutmayın. (1.2 hakkında emin değilim, özür dilerim).

Ve sadece terminatörün (bir GUI (GTK tabanlı) bir terminal çoklayıcı) yakınlaştırma işlemini yapabileceğinden bahsetmek . (Ctrl-ÜstKrkt-X varsayılan tuş bağlamadır). Tabii ki tmux’un yaptığı pek çok şey yapmıyor ...


32
1.8 sürümünden itibaren daha iyi bir çözüm var (bkz. Tyler Holien'in cevabı).
momeara

1
Bunu daha iyi bir cevaptan önce deneyenlere, katılmak bölmesinin çalışmasını sağlamak için: join-pane -t:{previous}önceki pencere için ya join-pane -t:0da tekrar pencere 0'a katılmak.
Gerçekçi

488

Bu şimdi yerli bir tmux özelliğidir.

Sürüm 1.8 -Zbayrağının ilavesini gördü resize-pane. Man sayfasından:

-Z ile, aktif panel yakınlaştırılır (pencerenin tamamını kaplar) ve çevrilmemiş (düzendeki normal konumu) arasında geçiş yapar.

Varsayılan olarak tmux-prefix- zkurulumumda varsayılan olarak (OS X'teki Homebrew aracılığıyla).


4
Bu harikaydı, sadece .tmux.conf dosyama eklendi ve şimdi çok daha akıcı bir deneyime sahip: bind-key z resize-pane -Z
St-Ste-Ste-Stephen

Bir şekilde su altındaki panellerin kenarlarının derinlik göstergesi için görünür olması mümkün müdür? Yakınlaştırıldığımı ve "Z-başlığının" yeterince belirgin olmadığını unutmaya devam ediyorum.
lkraav

BunsenLabs kutuda çalışır.
Mateusz Piotrowski

müthiş. aslında işe yarıyor
sayem siam


49

Bunu bir süre önce sorduğunu biliyorum ... ... ama ekrandan bugüne değildim!

Aynı problemle karşılaştım, işte nasıl çözdüm:

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

İş akışınız benimki ise (yani bir pencereyi büyütmek, biraz iş yapmak, sonra derhal büyütmek) bu sizin için iyi sonuç vermelidir.


(Açık olmasa bile, bu, orijinal pencerenizdeki düzeni korur ... maksimize ve maksimize ettikten sonra, tamamen aynıdır.)
Ryan

2
Aynı tuş vuruşunu ikisine de nasıl eşleyebileceğim hakkında bir fikriniz var mı? Gibi bir şey bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Ama şimdi bu işlevi başka bir yerde, temizlik adına ve sadece tanımlamak istiyorum bind c-m :max_or_min. Mümkün mü? Aramanı zor buluyorum. (Sık sık yanlış komuta çarptığımı ve ek, boş 'tmux-zoom' pencereleri
oluşturduğumu biliyorum

7
Bu sadece benim için 'clear && echo TMUX ZOOM && read' değerini maksimuma çıkardığımda işe yaradı.
Epeli

Thw maksimize benim için işe yarar, ancak minimize etme eylemi orijinal pencereyi öldürerek maksimize edilmiş bölmeyi terk eder.
paradroid

Bu tür çalıştı, ama düzenimi kaybettim .. neredeyse olsa!
John Hunt,

25

Geliştirilmiş yakınlaştırma. Şimdi biri hiyerarşik olarak bile olsa birden fazla bölmeyi yakınlaştırabilir. Aşağıdakini yaptıktan ve tmux sunucunuzu yeniden yükledikten sonra (benim durumumda Ctrl-r) x, bir bölmeyi yakınlaştırmak ve uzaklaştırmak için anahtarınız bağlı olacaktır. Yakınlaştırma, pencereyi yeni bir pencerede açarak elde edilir ve uzaklaştırma, bir pencereyi orijinal penceresine geri götürerek elde edilir. Yakınlaştırma penceresini bölmeyi bitirirseniz, yakınlaştırma penceresinin bölmelerini yakınlaştırabilir ve yakınlaştırma penceresini geri uzaklaştırabilirsiniz. Uzaklaştırma yalnızca, tek bir bölmeyi içeren yakınlaştırma penceresindeyseniz gerçekleşir.

Sonunu sonuna ekle ~/.tmux.conf

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

Aşağıdaki dosyayı ekle

~$ 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
Sadece bir tek olumlu oy ?! Bu cevap harika! Çok iyi çalışıyor, eskiden kullandığım bloaty 'terminator' programının yerine tamamen yeni bir fonksiyonellik getiriyor.
SillyMunky

+1 Bu gerçekten çok iyi! Şimdiye kadar gördüğüm en iyi çözüm! Teşekkürler!!
armandino

Aynı fikirdeyim Bu işe yarıyor ve çok daha fazlası. Bu ekran ++
Brad Parks

+1. Bu harika çalışıyor, ancak en azından benim sistemimde yukarıdaki Ryan'ın cevabından daha yavaş bir saniyenin (~ 0.8s) bir kısmı. Önemli değil, ama daha hızlı hale getirmenin bir yolu olup olmadığını merak ediyorum
Amelio Vazquez-Reina

Gerçekten güzel. Yararlı hatırlatıcı olan özel bölme adlarını (zoom @…) ve tek "x" yakınlaştır / uzaklaştır komutunu seviyorum.
Eric O Lebigot

16

Ctrl+ b(önek) + z, içinde belirli bir bölmeye yakınlaştırmak için çalışır tmux 2.1. Tekrar Ctrl+ b+ tuşlarına bastığınızda z, bölmeyi tekrar orijinal boyutuna getirin. Yeni bir bölme oluşturmaz.

Aksay'ın yayınladığı çözümle karşılaştırıldığında, yakınlaştırılmış bölmeyi bölmeye çalışırsanız, bölmeye izin vermez ve orijinal bölmeye geri döner ve bunun yerine bölmeyi böler.

Pencereyi yakınlaştır seçeneği muhtemelen çok yönlüdür ...


2

Bunu, aynı tuş vuruşuyla en üst seviyeye çıkarmak / en aza indirmek için yaptım:

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

Ayrıca benim için 'clear && echo TMUX ZOOM && read' olmadan çalışın. Bu snippet ile her seferinde ilk pencereden bir bölmeyi küçültürüm.


1

resize-pane -ZBir toggle olma problemi , bazen, özellikle bir betikten veya içeriden çağrıldığında, istenenden ters zoom işlemini gerçekleştirmesidir tmux.conf.

İşte pratik:

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

Şimdi, bunun için varsayılan bir kısayol var:

tmux-prefix+z

Bu genellikle:

Ctrlb+z



0

12.04 Ubuntu'dayım ve bu özelliğe de ihtiyacım vardı. Tmux 1.8’den bu yana, tmux-prefix z ile yakınlaştırma için yerel destek var. 12.04'te tmux 1.8'i görmeyeceğimiz için, tmux 1.8'i başka bir dev bilgisayardaki kaynaktan derledim, onu _tmux-1.8 olarak değiştirdim ve 1.8 binary dosyasını /usr/bin/_tmux-1.8 olarak kopyaladım ve .bash_aliases -> alias olarak değiştirdim. tmux = '_ tmux-1,8'.

Bu hızlı ve kirli yöntemi kullanırken hiçbir sorun fark etmedim ve / eğer tmux 1.8 12.04'e geldiğinde hiçbir şey kırmadım.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.