“ ขยาย” บานหน้าต่างใน tmux


239

บางครั้งมันจะมีประโยชน์มากในการเพิ่มบานหน้าต่างใน tmux และจากนั้นเรียกคืนเป็นขนาดก่อนหน้า

ฉันอ่านคู่มือแล้วและหาทางไม่ได้ สิ่งที่ฉันเกิดขึ้นคือฉันสามารถผูกคีย์เพื่อปรับขนาดบานหน้าต่างเป็นความกว้าง "สูงสุด" และอีกแป้นหนึ่งเพื่อคืนค่าให้เป็นความกว้างที่กำหนดไว้ล่วงหน้า

แน่นอนว่ามันมีข้อเสียดังนั้นฉันจึงสงสัยว่าใครมีความคิดที่ดีกว่า

คำตอบ:


56

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-บานหน้าต่างดูเหมือนว่าจะอยู่ใน tmux 1.3 แต่ไม่ใช่ 1.1 (ไม่แน่ใจเกี่ยวกับ 1.2, ขออภัย)

และเพียงแค่พูดถึงว่าเทอร์มิ (กุย (GTK based) ขั้ว Multiplexer) สามารถทำในสิ่งที่ซูม (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จากหน้าคน:

ด้วย -Z บานหน้าต่างที่ใช้งานอยู่จะถูกสลับระหว่างซูม (ใช้ทั้งหน้าต่าง) และไม่ขยาย (ตำแหน่งปกติในโครงร่าง)

มันถูกผูกไว้กับtmux-prefix- zโดยค่าเริ่มต้นในการติดตั้งของฉัน (ผ่าน Homebrew บน OS X)


4
นี่เป็นสิ่งที่ดีเพียงเพิ่มใน. tmux.conf ของฉันและตอนนี้มีประสบการณ์ที่ลื่นไหลมากขึ้น: bind-key z resize-pane -Z -Z
St-Ste-Ste-Stephen

เป็นไปได้หรือไม่ที่จะเห็นขอบของบานหน้าต่างที่จมอยู่ใต้น้ำสำหรับการบ่งชี้ความลึก ฉันลืมไปเรื่อย ๆ ว่าฉันซูมเข้าและ "Z-title" ยังไม่โดดเด่นพอ
lkraav

ทำงานใน BunsenLabs จากกล่อง
Mateusz Piotrowski

น่ากลัว ใช้งานได้จริง
sayem siam

1
@lkraav ดูสีพื้นหลังเปลี่ยน Tmux ของบานหน้าต่างซูม
Kamil Maciorowski

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 ซูม' หน้าต่าง.)
chadoh

7
สิ่งนี้ใช้ได้กับฉันก็ต่อเมื่อฉันลบ 'ล้าง && echo TMUX ZOOM && read' จากการขยายให้ใหญ่สุด
Epeli

Thw max ใช้งานได้สำหรับฉัน แต่การย่อขนาดเล็กสุดเพียงแค่ฆ่าหน้าต่างเดิมโดยปล่อยให้บานหน้าต่างขยายใหญ่สุด
Paradroid

การทำงานแบบนี้ แต่ฉันทำเลย์เอาท์ของฉันเสียเลย ..
John Hunt

25

ปรับปรุง Zoomer ตอนนี้เราสามารถย่อ / ขยายบานหน้าต่างหลายบาน หลังจากทำด้านล่างและโหลดเซิร์ฟเวอร์ 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
มีเพียง upvote เดียว! คำตอบนี้ยอดเยี่ยมมาก! ทำงานได้ดีมากแนะนำการทำงานใหม่ที่ดีซึ่งตอนนี้แทนที่โปรแกรม bloaty 'terminator' ที่ฉันเคยใช้อย่างสมบูรณ์
sillyMunky

+1 นี่มันดีจริงๆ! โดยวิธีแก้ปัญหาการทำงานที่ดีที่สุดที่ฉันเคยเจอมา! ขอบคุณ !!
armandino

ฉันเห็นด้วย มันใช้งานได้และยอดเยี่ยมมาก It's screen ++
Brad Parks

+1 มันใช้งานได้ดี แต่มันเป็นเศษเสี้ยวของวินาที (~ 0.8s) ช้ากว่าคำตอบของ @ Ryan ด้านบนอย่างน้อยในระบบของฉัน ไม่ได้เป็นเรื่องใหญ่ แต่ผมสงสัยว่าถ้ามีวิธีที่จะทำให้มันเร็วขึ้น
เมลิโอ Vazquez-Reina

สวยอย่างแน่นอน ฉันชอบชื่อบานหน้าต่างพิเศษ (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

นอกจากนี้สำหรับฉันทำงานโดยไม่ต้อง 'ล้าง && echo TMUX ZOOM && อ่าน' ด้วยข้อมูลโค้ดนี้ทุกครั้งที่ฉันย่อขนาดหนึ่งบานหน้าต่างจากหน้าต่างแรกให้หายไป


1

ปัญหาเกี่ยวกับการเป็นสลับคือบางครั้งก็จะดำเนินการซูมกลับกว่าที่ต้องการโดยเฉพาะอย่างยิ่งเมื่อเรียกจากสคริปต์หรือภายในresize-pane -Ztmux.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 เนื่องจากเราอาจจะไม่เห็น tmux 1.8 ใน 12.04 ฉันรวบรวม tmux 1.8 จากซอร์สบนคอมพิวเตอร์ dev อื่นเปลี่ยนชื่อเป็น _tmux-1.8 และเพิ่งคัดลอกไบนารี 1.8 ไปเป็น /usr/bin/_tmux-1.8 และแก้ไขนามแฝง -> alias tmux = '_ tmux-1.8'

ฉันไม่ได้สังเกตเห็นปัญหาใด ๆ โดยใช้วิธีที่รวดเร็วและสกปรกนี้และเมื่อ / ถ้า tmux 1.8 มาที่ 12.04 ฉันไม่ได้ทำอะไรผิด


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.