ฉันจะจัดลำดับ tmux windows ใหม่ได้อย่างไร


413

ในscreenฉันสามารถพิมพ์C-a :number 0เพื่อย้ายหน้าต่างไปที่ด้านบนของรายการหน้าต่างและผลักหน้าต่างอื่น ๆ ทั้งหมดลงหนึ่งหน้าต่าง ลำดับคำสั่งเทียบเท่าtmuxคืออะไร ฉันดูหน้าคน แต่ฉันพบว่ามันทำให้สับสนในจุดนี้


95
C-b, .ช่วยให้คุณสามารถจัดลำดับหน้าต่าง
isomorphismes

7
อ่านคำตอบมากมายฉันยังคงไม่เห็นคำตอบของคำถาม OP อย่างง่าย: วิธีย้ายหน้าต่างที่กำหนดไปที่ตำแหน่ง 0 และเลื่อนส่วนที่เหลือทั้งหมดไปทางขวา ฉันต้องเปลี่ยนแต่ละคนทำสิ่งนี้ด้วยตนเองจริง ๆ หรือไม่ ฉันต้องการยกเลิกการย้ายที่ฉันทำโดยไม่ได้ตั้งใจ (และฉันไม่แน่ใจว่าเป็นอะไร) ซึ่งฉันคิดว่าย้ายหน้าต่าง 0 ไปที่หน้าต่าง 8 และเลื่อนคนอื่น ๆ ทั้งหมดไปทางซ้าย
nealmcb

1
@nealmcb วิธีที่ง่ายที่สุดที่ฉันจะทำได้คือตั้งค่าดัชนีฐานเป็น 1 เปลี่ยนหมายเลขจากนั้นย้ายหน้าต่างของคุณไปที่ช่องว่าง 0: superuser.com/a/1155999/674549
eMBee

สำหรับความแตกต่างของswap-window -s numberและswap-window -t numberการสลับหน้าต่างปัจจุบันดูคำตอบของฉันที่นี่
qeatzy

ดูคำตอบนี้สำหรับฟังก์ชั่นทุบตีเพื่อเลื่อนช่วงของหน้าต่าง tmux เช่น [2-5] จาก [0-6] windows
qeatzy

คำตอบ:


467

swap-windowคำสั่งจะใกล้เคียงกับสิ่งที่คุณต้องการ

"คำนำหน้า" (นั่นคือCtrl+ B, :โดยปริยาย) จะนำคุณไปพร้อมรับคำ tmux-คำสั่ง มีคุณป้อน:

swap-window -s 3 -t 1

เพื่อให้หน้าต่างหมายเลข 3 และหมายเลขหน้าต่าง 1 สลับตำแหน่ง

ในการสลับหน้าต่างปัจจุบันกับหน้าต่างด้านบนให้ทำ:

swap-window -t 0

ในกรณีที่ไม่น่าเป็นไปได้ที่ไม่มีหน้าต่างที่ดัชนี 0 ให้ทำ:

move-window -t 0

(หากดัชนีฐานเป็น 0 ตามค่าเริ่มต้น)

คุณสามารถผูกคำสั่งนั้นกับคีย์ (T สำหรับ "top" เป็นต้น) โดยการเพิ่มสิ่งต่อไปนี้ใน~/.tmux.conf:

bind-key T swap-window -t 0

6
ขอบคุณสำหรับการแก้ไขของคุณ แต่move-windowใช้งานได้หากไม่มีหน้าต่างอื่นในดัชนีที่ระบุ ดังนั้นในกรณีส่วนใหญ่move-window -t 0จะไม่ทำงานเนื่องจากปกติจะมีหน้าต่างอื่นที่ตำแหน่งนั้นอยู่แล้ว
matlehmann

ถูกต้องฉันจะปรับปรุงมัน
zakkak

2
movewคุณอาจต้องการที่จะมีลักษณะที่
Marcello Romani

3
นอกจากนี้bind-key L swap-window -t -1เพื่อให้เป็นหน้าต่างสุดท้าย

สำหรับความแตกต่างของswapw -s numberและswapw -t numberการสลับหน้าต่างปัจจุบันดูคำตอบของฉันที่นี่
qeatzy

257

เมื่อเพิ่มคำตอบของ Gareth คุณสามารถใช้การเชื่อมโยงคีย์ต่อไปนี้

bind-key -n C-S-Left swap-window -t -1
bind-key -n C-S-Right swap-window -t +1

กด Ctrl + Shift + ซ้าย (จะย้ายหน้าต่างปัจจุบันไปทางซ้ายขวาทำนองเดียวกันไม่จำเป็นต้องใช้ตัวปรับแต่ง (Cb)


9
สิ่งนี้-1และ+1ไวยากรณ์ช่วยแก้ปัญหาดัชนีที่ถูกครอบครอง tmux จะเลื่อนหน้าต่างอื่น ๆ ให้คุณและเหตุการณ์จะล้อมรอบไปยังส่วนท้าย / เริ่มต้นโดยอัตโนมัติ นี่คือคำตอบที่ดีที่สุด
brianpeiris

1
การที่ฉันไม่สามารถย้ายหน้าต่าง tmux ได้อย่างง่ายดายทำให้ฉันไม่กี่สัปดาห์ที่ผ่านมา มันทำให้ง่ายต่อการจัดการกับ windows! ขอบคุณมากจากการแปลง tmux ล่าสุด
calvinf

8
คำแนะนำที่ดีเยี่ยมbind-key S-Left swap-window -t -1ฉันเลยสามารถทำ <prefix> shift + arrow เพราะฉันไม่ชอบทำ messing up การผูกคีย์สำหรับโปรแกรม
เอียง

4
หากใช้ตัวอักษรคุณต้องใช้อักษรตัวใหญ่และไม่ใช่ CS เช่นนี้:bind-key -n C-H swap-window -t -1
Matthew Mitchell

1
ฉันมีปัญหาบางอย่างใน 1.9a เช่นกันเมื่อใช้ Ashish Ariga bind-key -n C-S-Left swap-window -t -1แต่มันก็โอเคเมื่อใช้คำนำหน้าตามที่@MatthewMitchell แนะนำ
Rho Phi

63

เทียบเท่า tmux จะเป็น:number 42:move-window -t 42


9
นี่ถูกผูกไว้กับ Cb
vedang

1
ขอบคุณ! นี่เป็นคำตอบที่ดีกว่า IMO
Ashe

5
@ArlenCuss ที่จริงแล้วทั้งสองคำตอบนั้นดีและมีประโยชน์ คุณเห็นโดยใช้หน้าจอ: หมายเลขที่คุณสามารถสลับหน้าต่างได้โดยใช้ tmux's: ย้ายหน้าต่างคุณสามารถย้ายตำแหน่งหน้าต่างได้เฉพาะหากดัชนีเป้าหมายไม่ได้ใช้งาน ดังนั้น imo ทั้งสอง: swap-window และ: move-window จำเป็นต้องเข้าใจการควบคุมตำแหน่งหน้าต่าง :)
Victor Farazdagi

1
+1 สำหรับการรับคำตอบจากกูรูการเขียนโปรแกรม (เช่นเดียวกับการแก้ไข) นี่เป็นวิธีเดียวที่ฉันจะทำให้มันทำงานบนหน้าต่างที่ใช้งานอยู่
engineerDave

4
tmux ของ:move-windowคือไม่:numberเทียบเท่ากับหน้าจอ :numberสลับถ้าปลายทางมีอยู่, :move-windowล้มเหลวในกรณีนั้น คุณต้องเลือกระหว่าง:move-windowและ:swap-window
piec

15

ฉันกำหนดหมายเลขหน้าต่างใหม่เช่นนี้:

Ctrl+ b, .,222

จะทำให้tmuxหน้าต่างปัจจุบัน(บานหน้าต่างทั้งหมด) หมายเลข 222


ที่เกี่ยวข้อง: เมื่อฉันสับสิ่งรอบตัวฉันมักจะต้องการทำ

Ctrl+b :new-session -d -s "reading"

และจากที่นั่นฉันยังสามารถใช้Ctrl+ b, ., readingที่จะย้ายหน้าต่างปัจจุบัน (บานหน้าต่างทั้งหมดในครั้งเดียว) ไปยังเซสชั่นการอ่าน คุณสามารถเรียกดูหมู่ประชุมกับCtrl+ b, sวิธีการที่คุณจะเรียกใช้ภายในเซสชั่นCtrl+ ,bw

HTH


12

คุณสามารถใช้เทียบเท่ากับscreenของnumberคำสั่งการใช้สคริปต์เปลือกภายนอกที่เลือกระหว่างและswap-window move-windowคุณสามารถผูกมันไว้กับกุญแจด้วยวิธีนั้น:

bind < command-prompt -p index "run-shell '~/.tmux.number.sh %%'"

~/.tmux.number.sh:

#!/bin/bash
if [ $# -ne 1 -o -z "$1" ]; then
    exit 1
fi
if tmux list-windows | grep -q "^$1:"; then
    tmux swap-window -t $1
else
    tmux move-window -t $1
fi

2
ทางออกที่ดีมากทำงานได้ดี! ฉันเพิ่งทำการแก้ไขเล็กน้อยเพื่อล้างและลบ-Fตัวเลือกซึ่งไม่ได้รับการยอมรับจากรุ่น tmux ของฉัน
haridsv

8

การใช้หน้าต่างสลับเพื่อย้ายไปยัง id ใด ๆ : [ใกล้เคียงกับของหน้าจอ: หมายเลข]

# window movement / renumbering like in screen's :number
bind-key m command-prompt -p "move window to:"  "swap-window -t '%%'"

[m สำหรับการย้าย -> กดคำนำหน้า -m และป้อนพูด 3 . เพื่อเปลี่ยนหมายเลขหน้าต่างเป็น 3]


1
นี่เป็นสิ่งที่ดีอยู่แล้ว แต่สิ่งที่ดีกว่าคือ: ทำ swap-window และหากล้มเหลวให้ถอยกลับไปที่หน้าต่างย้าย
nisc

5

เนื่องจากคำตอบของ Ashish Ariga ใช้ไม่ได้กับเวอร์ชัน 1.9a และต่ำกว่า ผมใช้<และการสลับหน้าต่างไปทางซ้ายและขวาตามลำดับโดยการเพิ่มบรรทัดต่อไปนี้เพื่อ>.tmux.conf

# swap window to left or right
bind-key -r < swap-window -t -1
bind-key -r > swap-window -t +1

4

ทางออกที่ง่ายที่สุดจากmanคือการใช้การผูกค่าเริ่มต้น:

{           Swap the current pane with the previous pane.
}           Swap the current pane with the next pane.

6
tmux windows และ panes ต่างกัน
Marcello Romani

4
สิ่งนี้ยังช่วยให้ฉันได้สิ่งที่ฉันต้องการ
lkraav

คำถามนี้เกี่ยวกับ windows not panes
mbigras

3

สำหรับบรรดาของคุณที่ใช้byobuเป็น wrapper ของคุณสำหรับ tmux คุณสามารถสลับหน้าต่างปัจจุบันกับหน้าต่างก่อนหน้าหรือถัดไปด้วย:

Ctrl-Shift-F3
Ctrl-Shift-F4

การเชื่อมโยงคีย์ที่กำหนดโดยbyobuสำหรับคีย์เหล่านี้อาจเป็นที่สนใจ:

bind-key -n    C-S-F3 swap-window -t :-1
bind-key -n    C-S-F4 swap-window -t :+1

คงจะเป็นทางลัดที่ยอดเยี่ยมสำหรับการเลื่อนไปมาแยกในหน้าต่างที่ต้องการ
ปาโบล

2

วิธีที่ฉันใช้นั้นเป็นการรวมคำตอบของ 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 ดูเหมือนจะไม่มีทางรอบนี้


2

คุณสามารถใช้base-indexเพื่อเปลี่ยนหมายเลขเริ่มต้นสำหรับ windows ของคุณ หากคุณตั้งค่าbase-indexเป็น1จากนั้นmove-window -rจะกำหนดหมายเลขหน้าต่างใหม่ทั้งหมดที่เริ่มต้น1ซึ่งจะเป็นการเพิ่ม0การย้ายหน้าต่างไปยังช่องเสียบ:

set base-index 1
move-window -r
move-window -t 0

เมื่อเสร็จแล้วคุณสามารถรีเซ็ตbase-indexเป็น0หากคุณต้องการใช้ในmove-window -rภายหลังโดยไม่ย้ายหน้าต่างของคุณที่0


2

tmux-pain-controlจัดเตรียมctrl-b >และctrl-b <เพื่อย้ายหน้าต่างที่โฟกัสไปทางขวาและซ้ายล้อมรอบ


ใช้งานไม่ได้กับฉันใน tmux 2.5
Dmitry Frank

1
@DmitryFrank ops ใช่ฉันไม่ดี เป็นเพราะgithub.com/tmux-plugins/tmux-pain-control
pepper_chico

ขอบคุณ! จัดการเพื่อตั้งค่าทั้งสองด้วยตนเอง แต่ปลั๊กอินดูดีในวิธีอื่นเช่นกัน
Dmitry Frank

1

ทั้งสองswap-window -s 5และswap-window -t 5สลับหน้าต่างปัจจุบันด้วยหน้าต่าง 5 แต่มีความหมายต่างกัน

swap-window -s 5

  • โปรแกรม window 5 มีผลกับหมายเลขการชนะปัจจุบัน
  • หมายเลขหน้าต่างล่าสุดยังคงไม่เปลี่ยนแปลง
  • ทำซ้ำคำสั่งเดียวกันจะย้อนกลับไปยังสถานะก่อนหน้า

swap-window -t 5

  • โปรแกรมปัจจุบันมีผลกับหมายเลข 5
  • แทนที่ล่าสุดไปยังหมายเลขหน้าต่างปัจจุบัน

numberในswap-window -s numberและ-t numberสามารถเป็นได้ทั้งที่แน่นอนเช่น, 5 และญาติเช่น -1, 2

PS ด้านล่างเป็นข้อความที่ตัดตอนมาจาก tmux statusline ซึ่งแสดงถึงผลกระทบของswap-window -s 5

เมื่อเร็ว ๆ นี้:
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc

ตอนนี้หลังจากlast-window:
[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc

หลังswapw -s 5:
[0] 0:mc* 1:mpl 2:py2- 3:numpy 4:plot 5:vim

อีกswapw -s 5:
[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc

อีกlast-window:
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc


ดูคำตอบนี้สำหรับฟังก์ชั่นทุบตีเพื่อเลื่อนช่วงของหน้าต่าง tmux เช่น [2-5] จาก [0-6] windows
qeatzy

1

จากหน้าต่าง tmux ให้ลองดังต่อไปนี้เพื่อสลับหน้าต่าง 0 กับ 1:

$ tmux swap-window -d -s 0 -t 1


0

ฉันคิดว่าคุณต้องการรวมคีย์ใหม่เข้ากับคำสั่ง 'select-window'

ฉันรู้ว่าคุณบอกว่าคุณได้อ่าน man page แล้ว แต่คุณควรกลับไปอ่านต่อ คุณต้องแก้ไขไฟล์ ~ / .tmux.conf ของคุณเพื่อเพิ่มคำสั่ง bind-key

โดยเฉพาะดูที่หน้า 4 ของต่อไปนี้

tmux man page


choose-windowดูเหมือนจะไม่ย้ายหน้าต่างปัจจุบันไปยังตำแหน่งใหม่
แดน

นอกจากนี้ยังถูกผูกไว้แล้วchoose-window C-B w
kynan

0

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

สมมติว่าคุณมี 3 windows และต้องการเพิ่มหนึ่งในสี่ แต่ในตำแหน่งที่เคยเป็น 3 ก่อนหน้านี้

ก่อนที่คุณจะเพิ่มหน้าต่างใหม่: คำนำหน้า Tmux แล้ว จะเปิดคำสั่งย้าย พิมพ์ 4 และดัชนี 3 จะกลายเป็น 4 จากนั้นเพิ่มหน้าต่างใหม่และมันจะอยู่ที่ดัชนี 3 และหน้าต่างเก่าของคุณจะยังอยู่ที่ดัชนี 4


แม้ว่าเคล็ดลับที่เป็นประโยชน์ แต่นี่ไม่ได้ตอบคำถาม
Jan Doggen

0

ก่อนอื่นให้เปิดคำสั่ง tmux แล้วกด release:

Ctrl + b 

และหากต้องการเปลี่ยนหน้าต่างจริงเป็นหน้าต่างด้านขวา (ตามลำดับแบบวงกลม) ให้ทำดังนี้

}

วิธีเปลี่ยนหน้าต่างจริงเป็นซ้าย:

{
  • อย่าลืมที่จะใช้SHIFTเมื่อกดหรือ}{

2
มีประโยชน์อย่างแน่นอนในบางสถานการณ์ แต่จะจัดเรียงบานหน้าต่างใหม่ภายในหน้าต่าง (แทนที่จะเรียงลำดับหน้าต่างใหม่)
สแลชต่อท้าย

0

สำหรับสิ่งที่คุ้มค่า:

ฉันแฮกสคริปต์นี้ด้วยกันเพื่อให้สามารถสั่งซื้อหน้าต่างทั้งหมดใน "TUI" โดยจะแสดงรายการหน้าต่างทั้งหมดของคุณในไฟล์ชั่วคราวเปิดด้วยเครื่องมือแก้ไขเริ่มต้นของคุณ (สมมติว่าคุณได้ตั้งค่า $ EDITOR) หลังจากนี้คุณสามารถเรียงลำดับบรรทัดใหม่และหลังจากที่คุณบันทึกและปิดไฟล์หน้าต่างจะเรียงลำดับใหม่ตามลำดับ (คล้ายกับการสั่งซื้อที่กระทำเมื่อทำgit rebase -i)

#!/bin/bash

# Usage: tmux-mv    
#   Move your tmux windows around in an editor

tmpfile=$(mktemp)
tmux list-windows > $tmpfile
$EDITOR $tmpfile

# Move all windows to 50..x in the order you just specified
# Assumes you don't have 50 windows already(!)
cat $tmpfile | awk -F ":" '{ print " -s " $1 " -t 5" NR-1 }' |\
  xargs -I {} sh -c 'tmux move-window -d {}'

# Move them back down, retaining the order
tmux move-window -d -r
rm $tmpfile

มันอาจได้รับการปรับปรุงให้ดีขึ้นมากโดยเฉพาะ:

หมายเหตุ : คุณอาจถูกย้ายไปที่หน้าต่างอื่นหลังจากรันคำสั่ง

gif ของมันในการดำเนินการ (github)


0

ไม่มีคำตอบที่นี่ความพึงพอใจของฉันดังนั้นฉันเขียนสคริปต์ที่ (ประเภทของ) mimicks ที่พฤติกรรมหน้าต่างย้ายscreentmux

ตรวจพบว่าหมายเลขหน้าต่างปลายทางเล็กกว่าหมายเลขหน้าต่างที่เล็กที่สุดหรือใหญ่กว่าจำนวนหน้าต่างที่ใหญ่ที่สุดและหากเป็นเช่นนั้นจะทำให้หน้าต่างอื่น ๆ ทั้งหมดไปทางขวาหรือซ้าย . สิ่งนี้ทำได้ด้วยmove-windowคำสั่ง

หากหมายเลขหน้าต่างอยู่ในระหว่างหมายเลขที่เล็กที่สุด / ใหญ่ที่สุด (กล่าวคือตรงกับหมายเลขหน้าต่างที่มีอยู่) หมายเลขนั้นจะสลับกับswap-windowคำสั่ง

นี่คือสคริปต์:

#!/usr/bin/env bash
# Filename: ~/tmux-windowswap
# Function that provides improved window-swapping functionality for tmux
maxwin="$(tmux list-windows | cut -d: -f1 | sort -nr | head -n1)"
minwin="$(tmux list-windows | cut -d: -f1 | sort -n | head -n1)"
# Error checking
if [[ -z $2 ]]; then
  echo "Error: No window specified."
elif [[ ! $2 =~ ^-?[0-9]+$ ]]; then
  echo "Error: Bad window number specified."
# Bigger than everything; slide it to the far right, then renumber
elif [[ $2 -gt $maxwin ]]; then
  i=0 # intialize
  tmux move-window -t:$(($maxwin+1))
  winlist="$(tmux list-windows | cut -d: -f1 | xargs)"
  for n in $winlist; do
    i=$(($i+1)) # increment
    tmux move-window -s:$n -t:$i
  done
# Smaller than everything; slide it to the far left, then renumber
elif [[ $2 -lt $minwin ]]; then
  tmux move-window -t:0
  winlist=($(tmux list-windows | cut -d: -f1 | xargs | rev))
  i=${#winlist[@]} # initialize; start at highest indexed window
  for n in ${winlist[@]}; do
    tmux move-window -s:$n -t:$i
    i=$(($i-1)) # decrement
  done
# In-between; just a simple swap
else
  tmux swap-window -t:$2
fi

จากนั้นเพียงเพิ่มการผูกคีย์แบบง่ายเข้ากับ.tmux.conf:

bind m command -p "Send window to:"  "run -b '~/tmux-windowswap #I %1'"

หมายเหตุ : เพื่อ mimick อย่างสมบูรณ์แบบscreenหน้าต่างแลกเปลี่ยนพฤติกรรมผมเชื่อว่าเมื่อคุณย้ายหน้าต่างไปยังมีอยู่จำนวนหน้าต่างก็ควรใช้สถานที่ของหน้าต่างที่และทุกหน้าต่างอื่น ๆ จะสะกิดไปทางขวา มันจะค่อนข้างง่ายในการแก้ไขสคริปต์นี้ให้ทำ


0

ไม่จำเป็นสำหรับ commandline (ซึ่งคือCtrl+ bแล้ว:)

เพียงเลื่อนหน้าต่างไปมาด้วย

Ctrl+ b+:

จากนั้นป้อนหมายเลขหน้าต่างใหม่ (ฟรี) แล้วกด Enter

หากตอนนี้ไม่มีหมายเลขหน้าต่างให้ใช้Ctrl+ b+ .เพื่อกำหนดหมายเลขหน้าต่างใหม่

(เคล็ดลับ: ชื่อหน้าต่างของคุณกับCtrl+ b+ ,ถ้าคุณติดตามหลวมซึ่งเป็นที่)

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