592 votes

Comment réorganiser les fenêtres tmux?

Dans screen, je peux simplement taper C-a :number 0 pour déplacer une fenêtre en haut de la liste des fenêtres et pousser toutes les autres fenêtres vers le bas. Quelle est la séquence de commandes équivalente pour tmux? J'ai regardé la page de manuel, mais je trouve cela confus sur ce point.

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

670voto

matlehmann Points 6396

La commande swap-window est la plus proche de ce que vous voulez.

"Prefixe :" (c'est-à-dire Ctrl+B, : par défaut) vous amène à l'invite de commande tmux. Vous entrez alors :

swap-window -s 3 -t 1

pour faire échanger leur position à la fenêtre numéro 3 et à la fenêtre numéro 1.

Pour échanger la fenêtre actuelle avec la fenêtre en haut, faites :

swap-window -t 0

Dans le cas peu probable où il n'y aurait pas de fenêtre à l'index 0, faites :

move-window -t 0

(si l'index de base est 0, comme c'est le cas par défaut). La commande move-window -t est par défaut liée à Ctrl+B, ..

Vous pouvez lier cette commande à une touche (T pour "haut" par exemple) en ajoutant ce qui suit à votre ~/.tmux.conf :

bind-key T swap-window -t 0

7 votes

Merci pour votre édition, mais move-window ne fonctionne que s'il n'y a pas déjà une autre fenêtre à l'index donné. Donc dans la plupart des cas, move-window -t 0 ne fonctionnera pas, car il y aura généralement déjà une autre fenêtre à cette position.

0 votes

C'est vrai, je vais l'améliorer.

3 votes

Vous voudrez peut-être jeter un coup d'œil à movew.

370voto

Ashish Ariga Points 3551

Ajouter à la réponse de Gareth, vous pouvez utiliser les liaisons de touches suivantes

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

En appuyant sur Ctrl+Shift+Left (déplacera la fenêtre actuelle vers la gauche. De la même manière à droite. Pas besoin d'utiliser le modificateur (C-b).

Pour la version tmux 3.0, vous devriez utiliser les liaisons de touches suivantes

bind-key -n C-S-Left swap-window -t -1\; select-window -t -1
bind-key -n C-S-Right swap-window -t +1\; select-window -t +1

13 votes

Cette syntaxe -1 et +1 aide à résoudre le problème des indices occupés. tmux déplacera les autres fenêtres pour vous et passera même automatiquement à la fin/début. C'est la meilleure réponse.

0 votes

Je suis venu ici à la recherche du moyen le plus rapide d'écrire ces liaisons exactes. Merci!

1 votes

Mon incapacité à déplacer facilement les fenêtres tmux me gênait depuis quelques semaines. Cela rend tellement plus facile de gérer les fenêtres! Un grand merci à ce récent converti à tmux.

82voto

Marie Fischer Points 246

L'équivalent de tmux de :number 42 est :move-window -t 42.

12 votes

Il est lié à C-b.

1 votes

Merci! C'est bien mieux à mon avis que la réponse acceptée.

6 votes

@ArlenCuss En fait, les deux réponses sont bonnes et utiles. Vous voyez, en utilisant screen :number vous pourriez échanger les fenêtres, en utilisant :move-window de tmux vous ne pouvez que relocaliser la fenêtre si l'index cible n'est pas utilisé. Donc, à mon avis, à la fois :swap-window et :move-window sont nécessaires pour avoir le contrôle sur les emplacements des fenêtres :)

30voto

isomorphismes Points 1724

Je renumérote les fenêtres de cette manière :

Ctrl+b, ., 222

ferait passer la fenêtre actuelle de tmux au numéro 222.


De manière similaire : quand je déplace des choses, j'ai tendance à vouloir faire

Ctrl+b :new-session -d -s "reading"

et à partir de là je peux également utiliser Ctrl+b, ., reading pour déplacer la fenêtre actuelle (toutes les panes en même temps) vers la session de lecture. Vous pouvez naviguer parmi les sessions avec Ctrl+b, s de la même manière que vous navigueriez au sein d'une session avec Ctrl+b, w.

HTH

14voto

ken Points 2086

Vous pouvez implémenter l'équivalent de la commande number de screen en utilisant un script shell externe qui choisit entre swap-window et move-window. Vous pouvez le lier à une touche de cette manière :

bind < command-prompt -p index "run-shell '~/.tmux.number.sh %%'"

~/.tmux.number.sh:

#!/bin/bash
if [ $# -ne 1 -o -z "$1" ]; then
    exit 1
fi
if tmux list-windows | grep -q "^$1:"; then
    tmux swap-window -t $1
else
    tmux move-window -t $1
fi

2 votes

Très belle solution, fonctionnant parfaitement! J'ai simplement apporté des modifications mineures pour nettoyer et supprimé l'option -F qui n'est pas acceptée par ma version de tmux.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X