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.
Réponse
Trop de publicités?Aucune des réponses ici ne m'a satisfait, donc j'ai écrit un script qui (en quelque sorte) imite le comportement de déplacement de fenêtre de l'écran pour tmux
.
Il détecte si le numéro de la fenêtre de destination est plus petit que le plus petit numéro de fenêtre ou plus grand que le plus grand numéro de fenêtre, et si c'est le cas, pousse toutes les autres fenêtres vers la droite ou la gauche (respectivement) et les renumérote de 1 à N de manière incrémentielle. Cela se fait avec la commande move-window
.
Si le numéro de fenêtre est entre les numéros les plus petits/grands (c'est-à-dire, correspond apparemment à un numéro de fenêtre existant), il les échange simplement avec la commande swap-window
.
Voici le script:
#!/usr/bin/env bash
# Nom du fichier: ~/tmux-windowswap
# Fonction qui fournit une fonctionnalité améliorée d'échange de fenêtres pour tmux
maxwin=$(tmux list-windows | cut -d: -f1 | sort -nr | head -n1)
minwin=$(tmux list-windows | cut -d: -f1 | sort -n | head -n1)
# Vérification des erreurs
if [[ -z $2 ]]; then
echo "Erreur: Aucune fenêtre spécifiée."
elif ! [[ $2 =~ ^-?[0-9]+$ ]]; then
echo "Erreur: Mauvais numéro de fenêtre spécifié."
# Plus grand que tout; glissez-le complètement à droite, puis renumérotez
elif [[ $2 -gt $maxwin ]]; then
i=0
tmux move-window -t:$((maxwin + 1))
winlist=($(tmux list-windows | cut -d: -f1 | xargs))
for n in ${winlist[@]}; do
i=$((i + 1))
tmux move-window -s:$n -t:$i
done
# Plus petit que tout; glissez-le complètement à gauche, puis renumérotez
elif [[ $2 -lt $minwin ]]; then
tmux move-window -t:0
winlist=($(tmux list-windows | cut -d: -f1 | xargs | rev))
i=${#winlist[@]} # commencer à la fenêtre indexée la plus élevée
for n in ${winlist[@]}; do
tmux move-window -s:$n -t:$i
i=$((i - 1))
done
# Entre les deux; juste un simple échange
else
tmux swap-window -t:$2
fi
Ensuite, ajoutez simplement ce simple raccourci clavier à votre fichier .tmux.conf
:
bind m command -p "Envoyer la fenêtre à:" "run -b '~/tmux-windowswap #I %1'"
Remarque: Pour imiter parfaitement le comportement d'échange de fenêtres de l'écran avec tmux
, je crois que lorsque vous déplacez une fenêtre vers un numéro de fenêtre existant, elle devrait prendre la place de cette fenêtre et toutes les autres fenêtres sont poussées vers la droite. Il serait assez simple de modifier ce script pour le faire.
- Réponses précédentes
- Plus de réponses
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