การย้ายบานหน้าต่าง tmux ไปที่หน้าต่าง


228

ฉันจะย้ายบานหน้าต่างที่มีอยู่ไปยังหน้าต่างอื่นในtmux ได้อย่างไรเมื่อฉันมีหลายหน้าต่างและในทางกลับกัน

ฉันมาจากหน้าจอที่ฉันสามารถสลับไปที่บานหน้าต่างแล้วสลับหน้าต่างจนกว่าฉันจะไปที่ที่ฉันต้องการ; tmuxดูเหมือนจะไม่อนุญาตสิ่งนี้

คำตอบ:


209

คำสั่งในการทำเช่นนี้อยู่join-paneใน tmux 1.4

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.

เพื่อลดความซับซ้อนนี้ฉันมีการผูกเหล่านี้ในของฉัน.tmux.confสำหรับที่:

# pane movement
bind-key j command-prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:"  "join-pane -t '%%'"

ครั้งแรกคว้าบานหน้าต่างจากหน้าต่างเป้าหมายและเข้าร่วมกับปัจจุบันที่สองจะย้อนกลับ

จากนั้นคุณสามารถรีโหลดเซสชัน tmux ของคุณโดยรันสิ่งต่อไปนี้จากภายในเซสชัน:

$ tmux source-file ~/.tmux.conf

ฉันกำลังลองใช้วิธีนี้ แต่เมื่อฉันใส่รหัสของคุณลงในไฟล์. tmux.conf ของฉันและทำ Ctrl-b, j ดูเหมือนจะไม่มีอะไรเกิดขึ้น
mrlanrat

2
คุณต้องเปิดอย่างน้อย 2 windows โดยมีบานหน้าต่างสองบานในแต่ละบาน: จากนั้นกดPrefix+sและป้อนชื่อหน้าต่างที่พรอมต์เพื่อส่งบานหน้าต่างไปที่หน้าต่างนั้น ...
jasonwryan

ฉันยังไม่มีโชคกับสิ่งนี้ไม่มีอะไรเกิดขึ้น ฉันรู้สึกว่า tmux ไม่ได้อ่านไฟล์. tmux.conf เพราะมันไม่ตอบสนองต่อ Ctrl-b, j หรือ Ctrl-b, s (นี่เป็นเพียง 2 บรรทัดในไฟล์กำหนดค่า)
mrlanrat

7
@mrlanrat ฉันพบว่าคุณต้องใส่ตัวเลขหน้าต่างด้วยเครื่องหมายโคลอน ดูคำตอบของฉันด้านล่าง
Bruno Bronosky

1
'%%' หมายถึงอะไร
oligofren

152

เข้าร่วมบานหน้าต่างคือคำตอบ ฉันก็มีปัญหากับความพยายามของฉันที่จะใช้มันตามเอกสารประกอบ tmux ฉันค้นพบว่าสวิตช์ -t และ -s ดูเหมือนจะยอมรับหน้าต่าง [เซสชัน]: ไม่ใช่หน้าต่าง [เซสชัน:] กล่าวคือการระบุเซสชันเป็นทางเลือก แต่รวมถึง: เป็นข้อบังคับ (ฉันใช้ tmux 1.5)

ดังนั้นเพื่อที่จะเพิ่มบานหน้าต่างไปที่หน้าต่างปัจจุบันและวางหน้าต่างที่ 1 ลงในบานหน้าต่างคำสั่งจะเป็น (Ctrl-B หรือสิ่งที่คุณผูกกุญแจคือตามด้วย) ...

:join-pane -s :1

จากนั้นคุณสามารถแยกพวกเขาด้วย appart-break ซึ่งโดยค่าเริ่มต้นคือ: Ctrl-B! หากคุณต้องการผูกมันไว้กับทางลัดฉันไม่แนะนำให้ใช้การแทนที่ค่าเริ่มต้นเช่น s เพราะคุณจะมองหาคำตอบที่เกี่ยวข้องกับการเลือกเซสชันและอินเทอร์เน็ตจะไม่ทำงานบนระบบของคุณ ขอให้สังเกตว่าการทำลายบานหน้าต่างถูกผูกไว้กับ! และ @ อยู่ติดกับมันและไม่ผูกติดกับสิ่งใดโดยปริยาย ด้วยเหตุนี้ฉันขอแนะนำการผูกนี้ ...

bind-key @ command-prompt -p "create pane from:"  "join-pane -s ':%%'"

อีกวิธีหนึ่งคือมีตัวเลือกเชิงโต้ตอบ ...

bind-key @ choose-window 'join-pane -h -s "%%"'

อีกทางหนึ่งเพื่อเข้าร่วมหน้าต่างที่เข้าชมล่าสุดเสมอ ...

bind-key @ join-pane -h -s !

หมายเหตุ: -hสาเหตุที่ทำให้กองซ้อนบานหน้าต่างในแนวนอน (แยกเป็นแนวตั้ง) ซึ่งตรงข้ามกับลักษณะการทำงานเริ่มต้นซึ่งเป็นสิ่งที่ตรงกันข้าม

สิ่งที่สำคัญที่สุดคือการเรียนรู้ของคุณสิ่งที่คุณเลือกที่จะทางลัด เพราะถ้าคุณเพิ่งตั้งค่าและลืมมันคุณจะได้รับการ gimped เมื่อคุณพบว่าตัวเองอยู่บนเซิร์ฟเวอร์ต่างประเทศ สิ่งที่สำคัญที่สุดที่เทอร์มินัลมัลติเพล็กเซอร์ให้คุณคือเซสชันที่เชื่อถือได้บนเซิร์ฟเวอร์ระยะไกล

สิ่งนี้เสร็จสิ้นการแปลงของฉันจากหน้าจอ GNU เป็น Tmux ฉันจะไม่หันหลังกลับ

สนุก!


2
ฉันพลาด ':' เช่นกัน ... ขอบคุณสำหรับสิ่งนี้
rascalking

ฉันได้รับการโหวต 2 ครั้งเมื่อไม่นานมานี้โดยไม่มีความเห็นว่าเพราะอะไร นั่นเป็นเพียงวัฒนธรรมหยาบคายและต่อต้าน FOSS
Bruno Bronosky

1
เอกสารไม่ได้พูดถึงโคลอนเลย! เป็นคนดี
JonnyRaa

1
การใช้จุดไวยากรณ์คือสิ่งที่ช่วยฉันwindow.paneยกตัวอย่างเช่นjoin-pane -s 1.0ย้ายบานหน้าต่าง 0 ในหน้าต่าง 1 ลงในหน้าต่างปัจจุบัน รายละเอียดเพิ่มเติมที่maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras

ในฐานะของ tmux 2.1 สิ่งที่:เห็นได้ชัดไม่จำเป็นอีกต่อไป (เช่นทำ:join-pane -s 1) อาจเป็นข้อผิดพลาดในรุ่นก่อนหน้า
villapx

38

ฉันคิดว่าฉันชอบสิ่งที่ฉันใช้ในการย้ายบานหน้าต่างไปที่หน้าต่างของตัวเองดีขึ้น ฉันใช้

break-pane -t :

ฉันคิดออกมาจากการทดลอง แต่ดูเหมือนว่าจะทำงานได้ดีมาก คุณสามารถผูกหรือนามแฝงได้อย่างง่ายดายโดยไม่ต้องใช้สคริปต์


2
+1 join-paneฉันมักจะใช้นี้มากบ่อยกว่า
คริส B

14

หากคุณไม่ต้องการพิมพ์ตัวระบุบานหน้าต่างลงในพรอมต์คุณสามารถใช้

bind-key j "join-pane -s !"

ซึ่งจะเข้าร่วมบานหน้าต่าง / หน้าต่างที่ใช้งานล่าสุดกับหน้าต่างปัจจุบัน


1
คุณใช้เวอร์ชั่นไหน ฉันได้รับunknown command: join-pane -s !1.6
Paradroid

ใช้ 2.0 ที่นี่ แต่เพียงแค่วางสายลงใน conf โดยไม่ต้องใส่เครื่องหมายคำพูดดูเหมือนว่าจะทำงานได้ดี bind-key j join-pane -s !
bkzland

13

หลังจากดูคำตอบอื่น ๆ และอ่านหน้า man ของ tmux ฉันได้ตัดสินการเชื่อมโยงต่อไปนี้:

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

สิ่งนี้จะช่วยให้คุณเลือกหน้าต่างที่จะเข้าร่วมและสะท้อนตัวพิมพ์เล็กของฉันs/ vการโยงเพื่อสร้างการแยกแนวตั้ง / แนวนอนใหม่ หากใครรู้วิธีเลือกบานหน้าต่างแยกแต่ละบานแทนหน้าต่างแจ้งให้เราทราบ


สิ่งนี้มีประโยชน์มาก ขอขอบคุณ. น่าเสียดายที่-vและ-hอย่าสร้าง "แยก" ในแนวตั้งและแนวนอนตามลำดับ พวกเขาสร้าง " บานหน้าต่างซ้อน " แนวตั้งและแนวนอนตามลำดับ (กล่าวคือบานหน้าต่างที่เรียงซ้อนในแนวตั้งมีการแบ่งในแนวนอน) ดังนั้นคุณต้องฝึกสมองของคุณด้วยวิธีนี้ นอกจากนี้ยัง-vเป็นค่าเริ่มต้นดังนั้นฉันจะปล่อยมันไว้และใส่เข้าไปเท่านั้น-hเพื่อให้~/.tmux.confการกระทำของคุณเป็นแผ่นโกงให้คุณดู
Bruno Bronosky

ฉันชอบสิ่งนี้ดีกว่าคำตอบอื่น ๆ สำหรับ "ตรงกันข้ามกับ break-บานหน้าต่าง" การแตกบานหน้าต่างว่างลงในหน้าต่างของตัวเองชั่วคราวในภายหลังฉันต้องการส่งกลับไปยังหน้าต่างเก่ากว่ารุ่นใดรุ่นหนึ่งและนี่ก็จัดการได้อย่างงดงาม
Stabledog

13

การรวมคีย์

โดยค่าเริ่มต้นCtrl+ b, !จะทำลายบานหน้าต่างที่ใช้งานอยู่ในหน้าต่างใหม่และสลับไปที่

ไหนCtrl+ bเป็นค่าเริ่มต้นคำนำหน้าสำหรับtmux

รายละเอียด

tmuxคำสั่งนี้ดำเนินการที่สำคัญคือbreak-pane(นามแฝง: breakp) ในขณะที่การดำเนินการในcmd-break-pane.cและผูกพันเป็นค่าเริ่มต้นในคีย์ bindings.cเท่าที่เห็นในlist-keys(นามแฝง: lsk) ออกคำสั่ง:

bind-key    -T prefix       !                 break-pane

4

คุณไม่จำเป็นต้องเปลี่ยนการเชื่อมโยงที่สำคัญของคุณ

ขณะที่บานหน้าต่างที่คุณต้องการที่จะย้ายมีโฟกัสชนิดคำนำหน้าแล้ว:join-pane -t :1ซึ่ง1เป็นสิ่งที่จำนวนหน้าต่างปลายทางที่อยู่ในเซสชั่นเดียวกัน คุณสามารถย้ายไปอีกวาระหนึ่งโดย prepending project:3ชื่อเหมือน สำหรับผมแท็บเติมข้อความอัตโนมัติจากjoin-panej

เพิ่ม-hหรือ-vเปลี่ยนเป็นคำสั่งเพื่อกำหนดทิศทางของการแยกใหม่ที่สร้างขึ้นในปลายทางหรือเพียงแค่ไปที่มันและPrefix + spaceเพื่อจัดเรียงใหม่

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