Riordina tmux windows


21

Come posso riordinare efficientemente le finestre in tmux? Ad esempio, con questo set di finestre:

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

Cosa dovrei fare per spostarmi rsstra elinkse mutt, finendo con:

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

So usare move-windowper spostare una finestra su un indice ancora inutilizzato, e potrei usarne una serie per raggiungere questo obiettivo, ma, ovviamente, questo è molto noioso.


1
Questo Q&A SU mostra ciò che stai chiedendo: superuser.com/questions/343572/how-do-i-reorder-tmux-windows
slm

Risposte:


38

swap-window posso aiutarti:

swap-window -t -1

Sposta la finestra corrente a sinistra di una posizione.

Da man 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.

Puoi associarlo a una chiave:

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

Quindi è possibile utilizzare Shift+Lefte Shift+Rightper modificare la posizione corrente della finestra.


Ma dovrei ancora fare una serie di swap-windowcomandi (tre per il caso esemplificativo) - corretto?
vigore

@igor: Sì. Un altro modo, puoi farlo swap-window -s 2 -t 5. Questa finestra di scambio numero 2 con la finestra numero 5.
cuonglm

Giusto, ma voglio mantenere intatto l'ordine di tutte le altre finestre, quindi uno scambio 'semplice' di Windows 2 e 5 non lo fa per me. Conoscevo già il swap-windowcomando, ma non conoscevo i prefissi -/ +per indirizzare la finestra precedente / successiva.
vigore

consultare unix.stackexchange.com/a/525770/12497 per informazioni sul comportamento modificato delle swap-windowversioni più recenti di tmux
Steven Lu

2

La risposta accettata e altamente votata è corretta, sebbene il comportamento nelle recenti versioni di tmux veda il comando swap-window non tenerti sulla stessa finestra. Quindi funziona in modo non intuitivo, la finestra attiva verrà scambiata in quella direzione ma rimarrai nello stesso slot!

Per risolvere il problema, è sufficiente aumentare il legame per seguirlo. Ad esempio dal mio tmux config:

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

1

Ecco una soluzione funzionante avvolta nella funzione 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

Bonus: rimanere nella stessa finestra se la finestra attiva corrente non è interessata.


Brillante! Grazie.
Alexander Bird,

-1

Se tmuxè la versione 1.7 o successiva

move-window -r

o

set-option -g renumber-windows on

in .tmux.confper fare automaticamente, in futuro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.