L'approccio che uso combina un po 'della risposta di Ashish con quella di Piec; Ho la freccia alt-sinistra e destra legata a una rapida didascalia che sposta la finestra di una a sinistra o a destra, a meno che non sia la prima o l'ultima finestra, rispettosamente. L'ho fatto perché, quando si emette uno scambio +1 nell'ultima finestra (o si scambia -1 nella prima finestra), lo scambio continuerà comunque, invece di ricominciare da capo come ci si aspetterebbe:
0:one 1:two 2:three 3:zero*
diventa
0:zero* 1:two 2:three 3:one
Invece di
0:zero* 1:one 2:two 3:three
Quindi, i comandi che uso smettono di funzionare quando la finestra ha raggiunto il bordo dell'elenco:
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'
Questo può essere facilmente combinato con base-index e renumber-windows per avere un elenco di finestre che iniziano con un numero arbitrario e non hanno mai lacune.
Se stai usando l' indice di base 1 come me e non pensi di andare mai oltre le 999 finestre, puoi usare un piccolo trucco per farlo rotolare correttamente, anche se i comandi si gonfiano un po ':
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'
Funziona spostando temporaneamente l'ultima finestra sull'indice-0 non utilizzato e quindi chiamando move-window -r per rinumerarli a partire da 1 nuovamente. Funziona in modo simile quando si sposta la prima finestra alla fine; selezionando un numero enorme che non userai mai, si assicura che quando si sposta di nuovo la finestra di spostamento -r tutto verrà numerato come ti aspetteresti. Se ti stai chiedendo di refresh-client -S , è necessario perché a volte, mentre il riordino da move-window funzionerà correttamente, la barra di stato non si aggiornerà fino a quando non verranno apportate ulteriori modifiche. Forzando un aggiornamento della sola barra di stato (-S), si evita questo.
L'unico problema che posso trovare con questo approccio è che la finestra di scambio modificherà implicitamente l'ultima finestra utilizzata con quella con cui hai effettuato lo scambio. Quindi, se sei nella finestra # 1, passa alla finestra quattro e spostala indietro di una, scoprirai che la tua ultima finestra utilizzata è la nuova # 4 (precedentemente # 3) anziché # 1. Non sembra esserci un modo per aggirare questo.
C-b
,.
ti consente di rinumerare una finestra.