Réorganiser les fenêtres tmux


21

Comment puis-je réorganiser efficacement les fenêtres dans tmux? Par exemple, avoir cet ensemble de fenêtres:

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

Que devrais-je faire pour passer rssentre elinkset mutt, pour finir avec:

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

Je sais comment utiliser move-windowpour déplacer une fenêtre vers un index encore inutilisé, et je pourrais en utiliser une série pour y parvenir, mais, évidemment, c'est très fastidieux.


1
Ce Q&A SU montre ce que vous demandez: superuser.com/questions/343572/how-do-i-reorder-tmux-windows
slm

Réponses:


38

swap-window peut vous aider:

swap-window -t -1

Il déplace la fenêtre en cours vers la gauche d'une position.

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.

Vous pouvez le lier à une clé:

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

Ensuite, vous pouvez utiliser Shift+Leftet Shift+Rightpour modifier la position actuelle de la fenêtre.


Mais je devrais encore faire une série de swap-windowcommandes (trois pour le cas d'exemple) - correct?
igor

@igor: Oui. Une autre façon, vous pouvez le faire swap-window -s 2 -t 5. Cette fenêtre d'échange numéro 2 avec la fenêtre numéro 5.
cuonglm

Oui, mais je veux garder l'ordre de toutes les autres fenêtres intactes, donc un échange «simple» des fenêtres # 2 et # 5 ne le fait pas pour moi. J'étais déjà au courant de la swap-windowcommande, mais je ne connaissais pas les préfixes -/ +pour cibler la fenêtre précédente / suivante.
igor

voir unix.stackexchange.com/a/525770/12497 pour connaître le changement de comportement des swap-windowversions plus récentes de tmux
Steven Lu

2

La réponse acceptée et très appréciée est correcte, bien que le comportement dans les versions récentes de tmux voit que la commande swap-window ne vous garde pas sur la même fenêtre. Cela fonctionne donc de manière assez peu intuitive, votre fenêtre active sera permutée dans cette direction mais vous resterez dans le même emplacement!

Pour résoudre ce problème, augmentez simplement la liaison pour le suivre. Par exemple, depuis ma configuration tmux:

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

1

Voici une solution de travail enveloppée dans la fonction 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: restez dans la même fenêtre si la fenêtre active actuelle n'est pas affectée.


Brillant! Merci.
Alexander Bird

-1

Si tmuxest la version 1.7 ou supérieure

move-window -r

ou

set-option -g renumber-windows on

à .tmux.conffaire automatiquement, à l'avenir.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.