Sắp xếp lại các cửa sổ tmux


21

Làm thế nào tôi có thể sắp xếp lại các cửa sổ trong tmux một cách hiệu quả? Ví dụ: có bộ cửa sổ này:

0:zsh  1:elinks  2:mutt  3:irssi  4:emacs  5:rss  6:htop

Tôi sẽ phải làm gì để chuyển rssđến giữa elinksmutt, kết thúc bằng:

0:zsh  1:elinks  2:rss  3:mutt  4:irssi  5:emacs  6:htop

Tôi biết cách sử dụng move-windowđể di chuyển một cửa sổ đến một chỉ mục chưa được sử dụng và tôi có thể sử dụng một loạt chúng để đạt được điều này nhưng rõ ràng, điều này rất tẻ nhạt.


1
Câu hỏi và trả lời SU này cho thấy những gì bạn đang yêu cầu: superuser.com/questions
4323572 / how

Câu trả lời:


38

swap-window có thể giúp bạn:

swap-window -t -1

Nó di chuyển cửa sổ hiện tại sang trái bởi một vị trí.

Từ người đàn ông tmux :

swap-window [-d] [-s src-window] [-t dst-window]
             (alias: swapw)
This is similar to link-window, except the source and destination windows are swapped. 
It is an error if no window exists at src-window.

Bạn có thể liên kết nó với một khóa:

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

Sau đó, bạn có thể sử dụng Shift+LeftShift+Rightđể thay đổi vị trí cửa sổ hiện tại.


Nhưng tôi vẫn sẽ phải thực hiện một loạt các swap-windowlệnh (ba ví dụ cho trường hợp ví dụ)
igor

@ mạnh: Vâng. Một cách khác, bạn có thể làm swap-window -s 2 -t 5. Cửa sổ trao đổi số 2 này với cửa sổ số 5.
cuonglm

Phải, nhưng tôi muốn giữ nguyên thứ tự của tất cả các cửa sổ khác, vì vậy việc hoán đổi 'đơn giản' của cửa sổ số 2 và số 5 không làm điều đó cho tôi. Tôi đã biết về swap-windowlệnh này, nhưng không biết về -/ +tiền tố để nhắm mục tiêu cửa sổ trước / sau.
igor

xem unix.stackexchange.com/a/525770/12497 để giải quyết hành vi thay đổi của swap-windowcác phiên bản tmux mới hơn
Steven Lu

2

Câu trả lời được chấp nhận và đánh giá cao là chính xác, mặc dù hành vi trong các phiên bản tmux gần đây thấy lệnh cửa sổ trao đổi không giữ bạn trên cùng một cửa sổ. Vì vậy, nó hoạt động khá vô tình, cửa sổ hoạt động của bạn sẽ bị hoán đổi theo hướng đó nhưng bạn sẽ ở trong cùng một vị trí!

Để khắc phục vấn đề đó, chỉ cần tăng liên kết để theo dõi nó. Ví dụ từ cấu hình tmux của tôi:

bind -n C-S-Left { swap-window -t -1; previous-window }
bind -n C-S-Right { swap-window -t +1; next-window }

1

Đây là một giải pháp làm việc được bao bọc trong chức năng bash.

list=$(tmux lsw -F '#I');                           # for shift left, could be moved inside function
list=$(tmux lsw -F '#I'); list=$(echo $list|rev);   # for shift right, list reversed
shift_tmux_window_range() {  # depend on `list`
    local started=0 beg=$1 end=$2
    for i in $list; do
        if (($i == $beg)); then
            started=1; h=$beg; tmux linkw -s $beg && tmux unlinkw -t $beg;
        elif (($i == $end)); then
            tmux movew -d -s $i -t $h; tmux movew -d -t $end; break;
        elif [ $started = 1 ]; then
            tmux movew -d -s $i -t $h; h=$i;
        fi;
    done
}

shift_tmux_window_range 5 2

Phần thưởng: ở trong cùng một cửa sổ nếu cửa sổ hiện tại không bị ảnh hưởng.


Rực rỡ! Cảm ơn bạn.
Alexander Bird

-1

Nếu tmuxlà phiên bản 1.7 trở lên

move-window -r

hoặc là

set-option -g renumber-windows on

trong .tmux.confđể tự động làm, trong tương lai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.