Reordenar ventanas de tmux


21

¿Cómo puedo reordenar eficientemente Windows en tmux? Por ejemplo, tener este conjunto de ventanas:

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

¿Qué tendría que hacer para moverme rssentre elinksy mutt, terminando con:

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

Sé cómo usar move-windowpara mover una ventana a un índice aún no utilizado, y podría usar una serie de ellos para lograr esto, pero, obviamente, esto es muy tedioso.


1
Este SU Q & A muestra lo que estás pidiendo: superuser.com/questions/343572/how-do-i-reorder-tmux-windows
SLM

Respuestas:


38

swap-window puedo ayudarte:

swap-window -t -1

Mueve la ventana actual hacia la izquierda en una posición.

De 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.

Puedes vincularlo a una clave:

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

Luego puede usar Shift+Lefty Shift+Rightpara cambiar la posición actual de la ventana.


Pero todavía tendría que hacer una serie de swap-windowcomandos (tres para el caso de ejemplo), ¿correcto?
igor

@igor: sí. Otra forma, puedes hacerlo swap-window -s 2 -t 5. Esta ventana de intercambio número 2 con la ventana número 5.
Cuonglm

Correcto, pero quiero mantener intacto el orden de todas las demás ventanas, por lo que un intercambio 'simple' de las ventanas # 2 y # 5 no lo hace por mí. Ya conocía el swap-windowcomando, pero no conocía los prefijos -/ +para apuntar a la ventana anterior / siguiente.
igor

visite unix.stackexchange.com/a/525770/12497 para abordar el cambio de comportamiento swap-windowen las nuevas versiones de tmux
Steven Lu

2

La respuesta aceptada y altamente votada es correcta, aunque el comportamiento en las versiones recientes de tmux ve que el comando swap-window no te mantiene en la misma ventana. Por lo tanto, funciona de manera poco intuitiva, su ventana activa se intercambiará en esa dirección, ¡pero usted permanecerá en la misma ranura!

Para solucionar ese problema, simplemente aumente el enlace para seguirlo. Por ejemplo, desde mi 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

Aquí hay una solución de trabajo envuelta en la función 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

Bonificación: permanezca en la misma ventana si la ventana activa actual no se ve afectada.


¡Brillante! Gracias.
Alexander Bird

-1

Si tmuxes la versión 1.7 o superior

move-window -r

o

set-option -g renumber-windows on

en .tmux.confhacer automáticamente, en el futuro.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.