L'approche que j'utilise combine un peu de la réponse d'Ashish avec celle de piec ; j'ai alt-flèche gauche et droite liées à un petit appel shell rapide qui déplace la fenêtre d'un côté ou de l'autre, sauf s'il s'agit de la première ou de la dernière fenêtre, respectivement. J'ai fait cela parce que, lorsque vous émettez un swap +1 à la dernière fenêtre (ou swap -1 à la première fenêtre), il va quand même échanger, au lieu de revenir en arrière comme vous pourriez vous y attendre :
0:un 1:deux 2:trois 3:zéro*
Devient
0:zéro* 1:deux 2:trois 3:un
Au lieu de
0:zéro* 1:un 2:deux 3:trois
Ainsi, les commandes que j'utilise cessent de fonctionner lorsque la fenêtre a atteint le bord de la liste :
bind-key -n M-Gauche run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -d -t -1'
bind-key -n M-Droite run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -d -t +1'
Ceci peut facilement être combiné avec base-index et renumber-windows pour avoir une liste de fenêtres qui commencent à un nombre arbitraire et n'a jamais de lacunes.
Si vous utilisez base-index 1 comme moi et que vous ne pensez pas dépasser 999 fenêtres, vous pouvez utiliser un petit truc pour faire en sorte qu'il se déroule correctement, bien que les commandes deviennent un peu plus imposantes :
set -g base-index 1
set -g renumber-windows on
bind-key -n M-Gauche 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 -d -t -1 ; fi'
bind-key -n M-Droite 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 -d -t +1 ; fi'
Cela fonctionne en déplaçant temporairement la dernière fenêtre vers l'index-0 inutilisé, puis en appelant move-window -r pour les renuméroter en commençant à 1 de nouveau. Cela fonctionne de manière similaire lors du déplacement de la première fenêtre vers la fin ; en choisissant un nombre énorme que vous n'utiliserez jamais, cela garantit que lorsque move-window -r se déclenche à nouveau, tout sera numéroté comme vous vous y attendez. Si vous vous demandez à propos de refresh-client -S, c'est nécessaire car parfois, bien que le réarrangement de move-window fonctionnera correctement, la barre d'état ne se mettra pas à jour tant que d'autres modifications ne seront pas apportées. En forçant un rafraîchissement uniquement de la barre d'état (-S), vous évitez cela.
Le seul problème que je trouve avec cette approche est que swap-window modifiera implicitement la dernière fenêtre utilisée pour celle avec laquelle vous avez échangé. Ainsi, si vous êtes sur la fenêtre n°1, passez à la fenêtre quatre et la déplacez en arrière d'une, vous constaterez que votre dernière fenêtre utilisée est la nouvelle n° 4 (anciennement n°3) au lieu de la n°1. Il ne semble pas y avoir de solution à cela.
MODIFICATION en 2020 : Les versions récentes de tmux nécessitent -d
pour maintenir l'ancien comportement de déplacer la fenêtre actuelle et de rester avec elle à sa nouvelle position.
149 votes
C-b
,.
vous permet de renuméroter une fenêtre.9 votes
En lisant toutes les nombreuses réponses, je ne vois toujours pas de solution facile à la question de l'OP: comment déplacer une fenêtre donnée à la position 0 et décaler toutes les autres vers la droite. Dois-je vraiment déplacer manuellement chacune d'entre elles pour faire cela? Je veux juste annuler un déplacement que j'ai fait par erreur (et je ne suis pas sûr de quoi exactement) qui je pense a déplacé la fenêtre 0 vers la fenêtre 8 et déplacé toutes les autres vers la gauche.
1 votes
@nealmcb la solution la plus simple que j'ai pu trouver est de régler l'index de base à 1, renuméroter, puis déplacer votre fenêtre dans l'emplacement vide 0 : superuser.com/a/1155999/674549
0 votes
Pour la différence de
swap-window -s number
etswap-window -t number
pour échanger la fenêtre actuelle, consultez ma réponse ici.0 votes
Voir cette réponse pour une fonction bash afin de déplacer une plage de fenêtres tmux, par ex [2-5] de [0-6] fenêtres.
3 votes
@isomorphismes
C-b .
renumérote uniquement vers un numéro de fenêtre inexistant.:swap-window
peut réellement déplacer deux fenêtres existantes1 votes
@nealmcb Peut-être que vous aimez ma méthode : superutilisateur.com/a/1663968/121441
0 votes
Beaucoup de bonnes réponses ici, mais en manque de la réponse ultime pour "comment réorganiser lorsque l'on a les fenêtres 1, 2, 3, 6, 7 à 1-5". Tmux a
:move-window -r
pour faire ce genre de chose