คุณซ่อนบานหน้าต่าง tmux ได้อย่างไร


59

ฉันมี 3 บานหน้าต่างในหน้าต่าง tmux ของฉัน:

--------------------------
|             |      2   |
|             |          |
|        1    |----------|
|             |      3   |
|             |          |
--------------------------

บานหน้าต่างที่ 1 และ 2 vimมี บานหน้าต่างที่ 3 เป็น cli ฉันกำลังพัฒนา บางครั้งฉันต้องการเปรียบเทียบบานหน้าต่าง 1 และ 2 ดังนั้นฉันต้องการซ่อนบานหน้าต่าง 3:

--------------------------
|             |          |
|             |          |
|        1    |       2  |
|             |          |
|             |          |
--------------------------

จากนั้นนำบานหน้าต่าง 3 กลับมาอีกครั้ง ฉันไม่ต้องการฆ่าบานหน้าต่าง 3 เนื่องจากฉันได้ตั้งค่าบางอย่างที่นั่นและไม่ต้องการไปแม้ว่าจะตั้งค่าอีกครั้ง

  • มีบางอย่างที่คล้ายกันPREFIX + zซึ่งสามารถย่อขยายบานหน้าต่าง 2 แต่ไม่มีบานหน้าต่างสัมผัส 1 หรือไม่ หรือ
  • มีวิธีซ่อนบานหน้าต่าง 3 อย่างรวดเร็วและนำขึ้นมาใหม่เมื่อจำเป็นหรือไม่

คำตอบ:


71

ใช้คำสั่งbreak-paneและ join-paneอ้างถึงman tmuxรายละเอียดตัวเลือกและการใช้งาน


ซ่อนบานหน้าต่างที่ 3:

เลือกบานหน้าต่าง3และป้อน-Prefix:break-pane -dP

tmuxจะส่งบานหน้าต่าง3ไปที่หน้าต่างในพื้นหลัง ( -dธง) และพิมพ์ข้อมูลบางอย่างเกี่ยวกับมันในบานหน้าต่าง 2 ( -Pธง) โดยค่าเริ่มต้นคุณจะเห็นสิ่งที่ชอบ1:2.0(หมายถึง: session:window.pane) กดปุ่มqเพื่อทำงานต่อไป 1

1ด้วยวิธีปฏิบัติบางอย่างคุณจะสามารถวาง-Pธงเนื่องจากคุณสามารถคาดการณ์session:window.panetriplet: sessionค่าเริ่มต้นไปที่เซสชั่นปัจจุบันและpaneค่าเริ่มต้นไป0ในขณะที่windowจะเป็นตัวระบุหน้าต่างฟรีต่อไป

รับบานหน้าต่าง 3 กลับมา:

ที่จะได้รับบานหน้าต่าง3และรูปแบบกลับเลือกบานหน้าต่าง2และปัญหาPrefix- :join-pane -vs 1:2.0บอกtmuxจะแบ่งบานหน้าต่าง2ในแนวตั้ง ( -v) และจะเข้าร่วม (ต้นฉบับ) บานหน้าต่าง ( -s) 1:2.0ที่มีการระบุ คุณสามารถเลือกปล่อยsessionหรือpaneตัวระบุ ยังทราบ tmux ที่เก็บประวัติที่บรรทัดคำสั่งสะดวกสามารถเข้าถึงได้ด้วยPrefix- -:Up

คุณอาจต้องใช้เวลาสักพักในการหยุดมัน แต่เมื่อคุณทำเสร็จแล้วคุณจะสามารถสร้างการเชื่อมโยงคีย์แบบกำหนดเองที่สะดวกสำหรับคุณ


คำถามนี้มีข้อมูลที่เป็นประโยชน์และลูกเล่นที่อาจช่วยปรับปรุงเวิร์กโฟลว์ของคุณ


ล้างคำแนะนำ! ทำงานได้อย่างราบรื่นสำหรับฉันดีกว่าคำตอบของฉัน!
แบร์นฮาร์ด

โดยค่าเริ่มต้นบานหน้าต่าง 3 จะถูกแบ่งออกเป็นหน้าต่างสุดท้ายหากคุณมี 3 หน้าต่างอยู่ในเซสชันปัจจุบันบานหน้าต่างจะกลายเป็นหน้าต่าง 3 (สมมติว่าหน้าต่างเริ่มต้นจาก 0) ดังนั้น 3 ใน "หน้าต่าง 3" ขึ้นอยู่กับ หน้าต่างที่เปิดอยู่ฉันจะทำงานนี้ในการผูกคีย์ที่กำหนดเองได้อย่างไร
CodyChan

5

แนวคิด: เรียกใช้ tmux ใน tmux

การตั้งค่าดั้งเดิม:

บานหน้าต่างที่ 1 และบานหน้าต่างที่ 2; เคียงบ่าเคียงไหล่. เรียกใช้ vim ใน Pane 1 ตามปกติ

ในบานหน้าต่างที่ 2 ให้รัน tmux อีกครั้งและสร้างสองบานหน้าต่าง (หนึ่งบานอยู่ด้านบนสุดของช่วงเวลาอื่น) จากนั้นรันเสียงเรียกเข้าในช่อง 2.1 และ CLI ของคุณในบานหน้าต่าง 2.2 สิ่งนี้จะช่วยให้คุณสามารถบานหน้าต่างเต็มหน้าจอ 2.1 ด้วยอินสแตนซ์ที่สองของ Vim ของคุณส่งผลให้เกิดพฤติกรรมที่คุณต้องการ


นี่คือสิ่งที่ฉันเรียกออกจากกล่องคิด!
user881300

ขอบคุณ user881300 มันมีข้อบกพร่องบางอย่าง (ความสามารถในการส่งคำสั่งมีนิสัยใจคอเล็กน้อยเช่น) ฉันหวังว่าจะอัปเดตเป็นคำตอบที่สมบูรณ์ยิ่งขึ้นเมื่อฉันได้ทำการทดสอบแล้ว - ฉันต้องการฟังก์ชั่นที่คล้ายกันด้วยตัวเอง
BinaryBen

2
@ user881300 ในทางเทคนิคนี่คือกล่องในการคิดกล่อง
Mateen Ulhaq

3

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

เมื่อบานหน้าต่าง 2 เป็นบานหน้าต่างที่ใช้งานอยู่คุณสามารถ

PREFIX : resize-pane -D 40

จากนั้นหากต้องการเลื่อนขึ้นอีกครั้งคุณสามารถทำได้

PREFIX : resize-pane -D 28

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


ฉันกำลังปรับขนาดบานหน้าต่างโดยใช้set -g mouse-resize-pane onแต่เรามีตัวเลือกอื่นนอกเหนือจากการปรับขนาดหรือไม่
user881300

@ user881300 ฉันไม่ใช่tmuxผู้เชี่ยวชาญไม่ว่าจะด้วยวิธีใด แต่ฉันอยากรู้อยากเห็นหากเป็นไปได้
แบร์นฮาร์ด

1
CTRL+B, ALT+<arrow direction to resize>, กว่าCTRL+B, ESC, 4(ขอบคุณ @Bernhard) เพื่อกู้คืน
FelikZ

1

ฉันตอนนี้คำถามนี้เกือบ 5 ปี แต่ฉันเพิ่งพบว่าเพราะฉันต้องการทำสิ่งที่คล้ายกันและฉันมากับ keybindings ต่อไปนี้ขอบคุณคำตอบของ user78291 :

bind-key ! break-pane -d -n _hidden_pane
bind-key @ join-pane -s $.1

ด้วยวิธีนี้ฉันสามารถใช้Prefix!เพื่อซ่อนบานหน้าต่างปัจจุบันและPrefix@นำมันกลับมา ส่วนที่ดีคือฉันสามารถซ่อนหลายบานด้วยวิธีนี้

มันไกลจากความสมบูรณ์แบบ แต่มันทำงานซ่อนบานหน้าต่างและนำพวกมันกลับมาค่อนข้างดี


0

ฉันรู้ว่านี่ไม่ได้ซ่อนบานหน้าต่างที่คุณกำลังทำงานอยู่ แต่ฉันพยายามทำเช่นนี้เพื่อหยุด tmux ไม่ให้ส่งคำสั่งทั่วไปไปยังหน้าต่างที่เลือกและไปสู่ทางออกที่ง่ายกว่ามาก

หากคุณไม่ต้องการซ่อนบานหน้าต่างด้วยสายตา แต่ต้องการหยุดอินพุตใด ๆ ที่ไปที่บานหน้าต่าง สถานการณ์อาจเป็นได้ว่าคุณต้องการส่งคำสั่งไปยังบานหน้าต่างที่เปิด 5 บาน แต่ไม่ต้องการส่งไปยัง 2 บานหน้าต่าง

ในกรณีการใช้งานนี้คุณสามารถทำได้ ctrl + sบนบานหน้าต่างที่คุณไม่ต้องการให้คำสั่งไปที่ ( ctrl + sล็อคอินพุตทั้งหมดไปยังบานหน้าต่าง)

เมื่อเสร็จแล้วกดctrl + cเพื่อกลับออกมา

หมายเหตุ : อย่ากดctrl + qหลังจากคำสั่งมันจะเรียกใช้คำสั่งทั้งหมดบนหน้าจอนั้น ctrl + cจะไม่ทำสิ่งนี้ (ลองทำสิ่งนี้บน Ubuntu)

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