มีวิธีใดที่จะวาดหน้าต่าง tmux ใหม่เมื่อสลับจอเล็กลงเป็นใหญ่กว่าหรือไม่?


399

สมมติว่าคุณกำลังเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลผ่าน ssh ด้วย Terminal.app เมื่อคุณ "tmux แนบ" กับจอภาพความละเอียดที่ใหญ่กว่าจากเล็กกว่าที่คุณเคยเริ่ม tmux มันจะวาดจุดรอบคอนโซล มันไม่พอดีกับขนาดหน้าต่างใหม่ มีวิธีใดที่จะวาดใหม่และทำความสะอาดหน้าต่าง? CTRL+ LหรือCTRL- B+ Rไม่ช่วย ฉันไม่พบคำสั่งที่เหมาะสมกับมนุษย์

% tmux -V
tmux 1.5

7
ฉันต้องการทราบวิธีการวาดเซสชันทั้งหมดโดยไม่ต้องถอดออกเลย
PJ Brunet

3
ทุกคนแค่แยก ... คุณหาทางออกหรือไม่?
Patoshi パトシ

สำหรับการอ้างอิงอย่างรวดเร็ว: learnbatta.com/blog/tmux-working-with-split-terminal-95
anjaneyulubatta505

ใช่ฉันยังคงอยากรู้คำตอบของคำถาม: "มีวิธีใดที่จะวาดใหม่และทำความสะอาดหน้าต่าง?"
jaydel

คำตอบ:


579

tmuxจำกัด ขนาดของหน้าต่างให้เล็กที่สุดของแต่ละมิติในทุกเซสชันที่มีการแนบหน้าต่าง หากไม่ได้ทำสิ่งนี้จะไม่มีวิธีที่เหมาะสมที่จะแสดงพื้นที่หน้าต่างทั้งหมดสำหรับไคลเอ็นต์ที่เชื่อมต่อทั้งหมด

สิ่งที่ง่ายที่สุดที่จะทำคือแยกลูกค้าอื่นออกจากเซสชันเมื่อคุณแนบ:

tmux attach -d

อีกทางหนึ่งคุณสามารถย้ายลูกค้ารายอื่นไปยังเซสชันอื่นก่อนที่จะแนบกับเซสชัน:

takeover() {
    # create a temporary session that displays the "how to go back" message
    tmp='takeover temp session'
    if ! tmux has-session -t "$tmp"; then
        tmux new-session -d -s "$tmp"
        tmux set-option -t "$tmp" set-remain-on-exit on
        tmux new-window -kt "$tmp":0 \
            'echo "Use Prefix + L (i.e. ^B L) to return to session."'
    fi

    # switch any clients attached to the target session to the temp session
    session="$1"
    for client in $(tmux list-clients -t "$session" | cut -f 1 -d :); do
        tmux switch-client -c "$client" -t "$tmp"
    done

    # attach to the target session
    tmux attach -t "$session"
}
takeover 'original session' # or the session number if you do not name sessions

หน้าจอจะลดขนาดอีกครั้งหากไคลเอนต์ขนาดเล็กสลับไปที่เซสชัน

นอกจากนี้ยังมีรูปแบบที่คุณ "รับช่วง" หน้าต่างเท่านั้น (เชื่อมโยงหน้าต่างไปยังเซสชันใหม่ตั้งค่าaggressive-resizeและสลับเซสชันอื่น ๆ ที่มีหน้าต่างนั้นเปิดใช้งานไปยังหน้าต่างอื่นบางแห่ง) แต่สคริปต์ในทั่วไปนั้นยากกว่า กรณี (และแตกต่างจาก "exit" เนื่องจากคุณต้องการยกเลิกการเชื่อมโยงหน้าต่างหรือฆ่าเซสชันแทนที่จะแยกออกจากเซสชัน)


โปรดทราบว่าคุณจะได้รับการใช้งานปัจจุบันกับ$(tmux display-message -p '#S')ดู: superuser.com/questions/410017/...
GManNickG

3
คำตอบนี้ได้รับอุปกรณ์ประกอบฉากเพื่อดูรายละเอียดและฐานความรู้ แต่ดูคำตอบของ Shi B. Ctrl-b + Dเพื่อความสะดวกในการใช้งาน (และจดจำ)
fbicknel

"tmux detach -a" ใช้ได้สำหรับฉัน "tmux Attach -d" ไม่ได้
mahemoff

(1) ข้อผิดพลาดใหม่ tmux set-option... set-remain-on-exit onบน ดูtmux # ตอนนี้ใช้: tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on.
user1902689

1
(2) บน tmux ที่ใหม่กว่าต้องใช้new-windowอาร์กิวเมนต์สุดท้ายของบางอย่างเช่นมิ'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"ฉะนั้นคุณจะไม่เห็นข้อความ (ในบางสถานการณ์คุณจะเห็นว่าคุณเลื่อนขึ้นหรือถ้าเทอร์มินัลมีความสูง) หากคุณใช้สิ่งนี้คุณน่าจะดีกว่าถ้าไม่มีความคิดเห็น "(1)" หรือการตั้งค่าใดremain-on-exit
user1902689

462

คุณสามารถกดCTRL- B+ SHIFT- Dเพื่อเลือกไคลเอนต์ที่คุณต้องการแยกออกจากเซสชัน

tmux จะแสดงรายการเซสชันทั้งหมดด้วยมิติปัจจุบัน จากนั้นคุณก็แยกออกจากการประชุมขนาดเล็กทั้งหมด


6
การอธิบาย มันเป็นเมืองหลวง D. เล็ก 'd' แยกลูกค้า
Raghuram Murthy P

2
CTRL-Bถ้านั่นคือคำนำหน้าของคุณ ฉันเป็นCTRL-Aตั้งแต่ฉันเปลี่ยนจากหน้าจอ
Blaskovicz

1
อันที่จริงคุณต้องแยกออกจากทุกเซสชั่นขนาดเล็กจากกลุ่มเซสชั่นเดียวกัน อย่างไรก็ตาม CTRL-B + SHIFT-D ไม่แสดงแต่ละเซสชันเป็นของกลุ่มใด ฉันต้องการเรียกใช้tmux list-sessionsซึ่งแสดงชื่อเซสชันขนาดและข้อมูลกลุ่มจากนั้นจึงtmux kill-session -t <session_name>ฆ่าเซสชันของกลุ่มเดียวกัน
Zhichang Yu

180

โซลูชันที่ง่ายกว่าสำหรับ tmux รุ่นล่าสุด (ทดสอบที่ 1.9) ตอนนี้คุณสามารถทำได้:

tmux detach -a

-a สำหรับลูกค้าอื่น ๆ ทั้งหมดในเซสชั่นนี้ยกเว้นลูกค้าปัจจุบัน

คุณสามารถใช้นามแฝงใน [bash | zsh] rc

alias takeover="tmux detach -a"

ขั้นตอนการทำงาน: คุณสามารถเชื่อมต่อกับเซสชั่นของคุณตามปกติและถ้าคุณใส่ใจโดยอีกช่วงหนึ่งที่บังคับให้ลงขนาดของหน้าต่าง tmux takeoverคุณก็สามารถโทร


13
ขอบคุณมาก! ทำงาน หากคุณกำลังทำอยู่ในเซสชั่น tmux ที่ใช้งานอยู่เพียงแค่กด CTRL + B (หรือคำสั่ง tmux ที่กำหนดเองของคุณ) จากนั้น:detach -a
Iacchus

หรือเพียงแค่รันtmux detach -aบนบรรทัดคำสั่งเชลล์ภายใน Tmux
jdhao

4

คำตอบอื่น ๆ ไม่ได้ช่วยฉันเพราะฉันมีเพียงลูกค้าที่แนบมา (ก่อนหน้านี้ที่เริ่มเซสชั่นถูกถอดออกแล้ว)

เพื่อแก้ไขฉันปฏิบัติตามคำตอบที่นี่ (ฉันไม่ได้ใช้ xterm)

ซึ่งพูดง่าย ๆ ว่า:

  1. แยกออกจากเซสชัน tmux
  2. เรียกใช้resizeคำสั่ง linux
  3. กลับไปที่เซสชัน tmux

3

ฉันเพิ่งพบปัญหานี้และสะดุดในสถานการณ์ที่แตกต่าง แม้ว่ามันอาจเป็นเพียงยูนิคอร์น แต่ฉันคิดว่าฉันจะวางมันลง

ฉันมีหนึ่งเซสชันที่เล็กลงและฉันสังเกตเห็นว่าขนาดแบบอักษรแตกต่างกัน: เซสชันที่เล็กลงมีแบบอักษรเล็กลง เห็นได้ชัดว่าฉันเปลี่ยนขนาดตัวอักษรของหน้าต่างด้วยเหตุผลบางอย่าง

ดังนั้นใน OS X ฉันเพิ่งทำCmd-+ในเซสชั่นขนาดเล็กและมันกลับเข้าที่


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

0
ps ax | grep tmux
17685 pts/22   S+     0:00 tmux a -t 13g2
17920 pts/11   S+     0:00 tmux a -t 13g2
18065 pts/19   S+     0:00 grep tmux

ฆ่าอีกอันหนึ่ง


8
ดูเหมือนว่าคำตอบที่ถูกต้องสำหรับคำถามชื่อแม้จะมีคำตอบที่ดีกว่า ฉันไม่เข้าใจว่าทำไมมันถึงถูกลดทอนลงไป
JoL

yessss นี่เป็นคำตอบเดียวที่เหมาะกับฉัน
Yasir Hantoush


0

ฉันใช้Ctrl- b+ qซึ่งทำให้หมายเลขแฟลชสำหรับแต่ละบานหน้าต่างการวาดใหม่ระหว่างทาง

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