Tmux pencereleri yeniden sırala


21

Tmux'taki pencereleri nasıl verimli bir şekilde yeniden düzenleyebilirim? Örneğin, bu pencere kümesine sahip olmak:

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

Sonuna kadar rssarasında elinksgidip gelmek için ne yapmam gerekir?mutt

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

move-windowBir pencereyi henüz kullanılmamış bir dizine taşımak için nasıl kullanılacağını biliyorum ve bunu elde etmek için bunlardan bir dizi kullanabilirim - ama açıkçası, bu çok sıkıcı.


1
Bu SU Soru ve Cevapları ne istediğinizi gösterir: superuser.com/questions/343572/how-do-i-reorder-tmux-windows
slm

Yanıtlar:


38

swap-window size yardımcı olabilir:

swap-window -t -1

Mevcut pencereyi bir konum sola taşır.

Gönderen adam 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.

Bir anahtara bağlayabilirsiniz:

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

Ardından mevcut pencere konumunu değiştirmek için Shift+Leftve tuşlarını kullanabilirsiniz Shift+Right.


Fakat yine de bir dizi swap-windowkomut yapmak zorunda kalacağım (örnek olay için üç) - doğru mu?
igor,

@ igor: Evet. Başka bir yolla yapabilirsin swap-window -s 2 -t 5. Bu pencere numarası 2 ile pencere numarası 5'i değiştirir.
cuonglm

Doğru - ama diğer tüm pencerelerin sırasını bozulmadan tutmak istiyorum, bu nedenle # 2 ve # 5 pencerelerinin 'basit' bir değişimi benim için yapmıyor. swap-windowKomutun farkındaydım , ancak önceki / sonraki pencereyi hedefleyen -/ +önekleri bilmiyordum .
igor,

daha yeni tmux versiyonlarındaki değişik davranışları ele almak için unix.stackexchange.com/a/525770/12497 adresine bakınızswap-window
Steven Lu

2

Son tmux versiyonlarındaki davranış, takas penceresi komutunun sizi aynı pencerede tutmayacağını görmesine rağmen, kabul edilen ve fazlasıyla yanıtlanan yanıt doğrudur. Böylece istenmeyen bir şekilde çalışır, aktif pencereniz bu yönde değiştirilir, ancak aynı yuvada kalırsınız!

Bu sorunu çözmek için, basitçe onu takip etmesi için bağları güçlendirin. Örneğin benim tmux config gelen:

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

1

İşte bash işlevine sarılmış bir çalışma çözümü.

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

Bonus: Geçerli etkin pencere etkilenmezse aynı pencerede kalın.


Parlak! Teşekkür ederim.
Alexander Bird

-1

Eğer tmuxsürüm 1.7 ya da daha yüksektir

move-window -r

veya

set-option -g renumber-windows on

içinde .tmux.confotomatik olarak gelecekte yapmak için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.