tmux - แทรกหน้าต่างที่ตำแหน่งที่ระบุ


13

tmux มีคำสั่ง "ย้ายหน้าต่าง" ซึ่งคุณสามารถย้ายหน้าต่างไปยังดัชนีว่างที่ระบุเช่น:

move-window -t 3

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

ฉันกำลังมองหาตัวเลือกที่จะอนุญาตให้ฉันย้าย (แทรก) หน้าต่างของฉันที่ตำแหน่ง 3 แม้ว่าจะถูกใช้ไปแล้วและเพิ่มหมายเลขหน้าต่างสำหรับหน้าต่างอื่น ๆ ที่ตามมา (ตัวอย่างเช่นที่เดิมที่ 3 อยู่ในตอนนี้) เป็น 4 ต่อไปนี้จะเป็น 5 ฯลฯ )

tmux 

คำตอบ:


2

สคริปต์ด้านล่างจะช่วยให้คุณทำสิ่งที่คุณต้องการ คุณสามารถเรียกใช้จากเชลล์พรอมต์หรือคุณสามารถ:

:run "ins-move 2 5"

ตัวอย่างนั้นย้ายหน้าต่างสองไปยังตำแหน่งก่อนหน้าต่างห้า

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done

ขอบคุณ! ใช้งานได้ดี - แม้ว่าฉันจะต้องปรับให้เข้ากับการทำงานแม้ในกรณีเช่น "5 2" อย่างน้อยตอนนี้ฉันรู้ว่ามันเสร็จแล้ว

@ Andrei: ฉันดีใจที่ฉันสามารถให้คุณเริ่มต้น โปรดอย่าลืมทำเครื่องหมายคำตอบที่ยอมรับและยกเลิกเมื่อคุณรู้สึกว่าเหมาะสม
Dennis Williamson

ฉันยกระดับคำตอบของคุณในตอนนี้ ไม่สามารถทำได้มาก่อนเพราะตอนนี้ฉันเพิ่งได้คะแนนชื่อเสียงเพียงพอ

25

ลอง: new-window -a

การใช้ตัวเลือก -a เมื่อสร้างหน้าต่างใหม่สามารถแทรกหน้าต่างใหม่ที่ดัชนีถัดไปในขณะที่ดัชนีหน้าต่างอื่น ๆ ทั้งหมดจะเพิ่มขึ้นโดยอัตโนมัติ


ดูเหมือนว่าจะเป็นทางออกที่ดีกว่า @DennisWilliamson ขออภัย Dennis :-) ฉันกำลังใช้งานอยู่tmux 1.9aคุณลักษณะนี้อาจไม่มีในรุ่นก่อนหน้า
Sonia Hamilton

น่ากลัว ไม่แน่ใจว่าฉันพลาดอย่างไร คุณช่วยฉันจาก 4 ปีในอดีตนักเดินทางข้ามเวลา! ขอบคุณ!
rld

1

ฉันมีวิธีแก้ปัญหาโดยไม่ต้องใช้สคริปต์ภายนอก วางสิ่งต่อไปนี้ใน. tmux.conf ของคุณ:

bind i command-prompt -p 'Insert window at:' 'run-shell "if tmux select-window -t %1; then tmux new-window -a; tmux swap-window -s %1 -t \$((%1+1)); else tmux new-window; tmux move-window -t %1; fi; tmux select-window -t #I; tmux select-window -t %1;"'

กด [PREFIX] -i และระบุตำแหน่งที่ต้องการแทรก คำสั่ง select-window 2 อันสุดท้ายทำให้แน่ใจว่าหน้าต่าง 'ก่อนหน้า' ถูกตั้งค่าตามที่คาดไว้และคุณไปที่หน้าต่างแทรก

แก้ไข:ตกลงฉันพูดเร็วเกินไป ฉันต้องเปลี่ยน#Iเป็น#{window_id}เพราะดัชนีหน้าต่างมีการเปลี่ยนแปลงสำหรับบางหน้าต่างในการแทรก ฟังก์ชั่นใหม่ (พร้อมเพิ่มบรรทัดใหม่เพื่อให้สามารถอ่านได้):

bind i command-prompt -p 'Insert window at:' '      \
    run-shell "                                     \
        if tmux select-window -t %1; then           \
            tmux new-window -a;                     \
            tmux swap-window -s %1 -t \$((%1+1));   \
        else                                        \
            tmux new-window;                        \
            tmux move-window -t %1;                 \
        fi;                                         \
        tmux select-window -t #{window_id};         \
        tmux select-window -t %1;                   \
    "'                                               

ฉันเริ่มใช้เวอร์ชันที่เรียบง่ายผ่านคำสั่ง 2 ต่อไปนี้ใน. tmux.conf:

 bind i command-prompt -p 'Insert window at:' 'new-window -a -t %1; swap-window -t -1'
 bind I command-prompt -p 'New window at:'    'new-window -t %1'

คำนำหน้า - ฉันแทรกหน้าต่างใหม่ที่ตำแหน่งxเมื่อมีหน้าต่างxและย้ายหน้าต่างไปไว้เหนือหน้าต่างนั้น คำนำหน้าฉันสร้างหน้าต่างใหม่ที่ตำแหน่งxเมื่อหน้าต่างxไม่อยู่

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