วิธีที่ฉันใช้นั้นเป็นการรวมคำตอบของ Ashish เข้ากับ piec's; ฉันมีลูกศรซ้าย - ขวาและลูกศรขวาผูกเข้ากับคำบรรยายภาพเปลือกเล็ก ๆ อย่างรวดเร็วที่ย้ายหน้าต่างหนึ่งไปทางซ้ายหรือขวายกเว้นว่ามันเป็นหน้าต่างแรกหรือหน้าต่างสุดท้ายด้วยความเคารพ ฉันทำเช่นนี้เพราะเมื่อคุณออก swap 1 ที่หน้าต่างสุดท้าย (หรือ swap -1 ที่หน้าต่างแรก) มันจะยังคง swap แทนที่จะวนกลับไปมาเหมือนที่คุณคาดหวัง:
0:one 1:two 2:three 3:zero*
กลายเป็น
0:zero* 1:two 2:three 3:one
แทน
0:zero* 1:one 2:two 3:three
ดังนั้นคำสั่งที่ฉันใช้หยุดทำงานเมื่อหน้าต่างถึงขอบของรายการ:
bind-key -n M-Left run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -t -1'
bind-key -n M-Right run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -t +1'
สิ่งนี้สามารถนำมารวมกับbase-indexและrenumber-windowsได้อย่างง่ายดายเพื่อให้มีรายการ windows ที่เริ่มต้นด้วยหมายเลขที่กำหนดเองและไม่มีช่องว่างใด ๆ
หากคุณกำลังใช้ดัชนีฐาน 1อย่างฉันและคุณไม่คิดว่าคุณจะไปที่สูงกว่า 999 windows คุณสามารถใช้เคล็ดลับเล็ก ๆ น้อย ๆ เพื่อทำให้มันหมุนอย่างถูกต้องแม้ว่าคำสั่งจะขยายออกไปเล็กน้อย:
set -g base-index 1
set -g renumber-windows on
bind-key -n M-Left run-shell 'if tmux list-windows | head -n 1 | grep -q active ; then tmux move-window -t 999 \; move-window -r \; refresh-client -S ; else tmux swap-window -t -1 ; fi'
bind-key -n M-Right run-shell 'if tmux list-windows | tail -n 1 | grep -q active ; then tmux move-window -t 0 \; move-window -r \; refresh-client -S ; else tmux swap-window -t +1 ; fi'
สิ่งนี้ทำงานโดยการย้ายหน้าต่างสุดท้ายไปยังดัชนีที่ไม่ได้ใช้ 0 ชั่วคราวจากนั้นเรียกใช้move-window -rเพื่อกำหนดหมายเลขใหม่โดยเริ่มจาก 1 อีกครั้ง มันทำงานคล้ายกันเมื่อย้ายหน้าต่างแรกไปยังจุดสิ้นสุด; โดยการเลือกจำนวนมากที่คุณไม่เคยใช้จะช่วยให้มั่นใจได้ว่าเมื่อย้ายหน้าต่าง -r-ยิงอีกครั้งทุกอย่างจะถูกกำหนดหมายเลขตามที่คุณคาดหวัง หากคุณสงสัยเกี่ยวกับrefresh-client -Sซึ่งเป็นสิ่งจำเป็นเพราะบางครั้งในขณะที่การเรียงลำดับใหม่จากหน้าต่างย้ายจะทำงานอย่างถูกต้องแถบสถานะจะไม่อัปเดตจนกว่าจะมีการเปลี่ยนแปลงเพิ่มเติม ด้วยการบังคับให้รีเฟรชเพียงแค่แถบสถานะ (-S) คุณจะหลีกเลี่ยงสิ่งนี้
ปัญหาเดียวที่ฉันสามารถหาได้ด้วยวิธีนี้คือswap-windowจะเปลี่ยนหน้าต่างที่ใช้ล่าสุดไปเป็นหน้าต่างที่คุณสลับกับโดยปริยาย ดังนั้นหากคุณอยู่บนหน้าต่าง # 1 ให้เปลี่ยนเป็นหน้าต่างสี่และย้ายกลับมาหนึ่งหน้าต่างคุณจะพบว่าหน้าต่างที่ใช้ล่าสุดของคุณคือ # 4 ใหม่ (เดิมคือ # 3) แทนที่จะเป็น # 1 ดูเหมือนจะไม่มีทางรอบนี้
C-b
,.
ช่วยให้คุณสามารถจัดลำดับหน้าต่าง