Question Comment réorganiser les fenêtres tmux?


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


357
2018-02-02 19:53


origine


C-b, . vous permet de renuméroter une fenêtre. - isomorphismes
En lisant toutes les nombreuses réponses, je ne vois toujours pas de solution facile à la question des OP: comment déplacer une fenêtre donnée vers la position 0 et déplacer tout le reste vers la droite. Dois-je vraiment déplacer manuellement chacun pour ce faire? Je veux juste défaire un coup que j'ai fait par erreur (et je ne suis pas sûr de ce que), je pense que j'ai déplacé la fenêtre 0 vers la fenêtre 8 et déplacé tous les autres vers la gauche. - nealmcb
@nealmcb le plus simple que je puisse trouver est de définir index-base sur 1, renuméroter, puis déplacez votre fenêtre dans le 0 vide: superuser.com/a/1155999/674549 - eMBee
Pour différence de swap-window -s number et swap-window -t number pour permuter la fenêtre actuelle, voir ma réponse ici. - qeatzy
Voir cette réponse pour une fonction bash, décaler la plage des fenêtres tmux, par exemple, [2-5] des fenêtres [0-6]. - qeatzy


Réponses:


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

"Préfixe:" (c'est-à-dire "Ctrl-B:" par défaut) vous amène à l'invite de commande tmux. Là vous entrez:

swap-window -s 3 -t 1

pour laisser la fenêtre numéro 3 et la fenêtre numéro 1 changer leurs positions.

Pour échanger la fenêtre en cours avec la fenêtre supérieure, procédez comme suit:

swap-window -t 0

Dans le cas peu probable de ne pas avoir de fenêtre à l'index 0, faites:

move-window -t 0

(si index-base est 0, comme c'est par défaut).

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

bind-key T swap-window -t 0

397
2018-03-01 09:39



Merci pour votre retouche, mais move-window ne fonctionne que s'il n'y a pas une autre fenêtre à l'index donné. Donc, dans la plupart des cas, move-window -t 0 ne fonctionnera pas, car il y aura déjà une autre fenêtre à cette position. - matlehmann
C'est vrai, je vais l'améliorer. - zakkak
Vous voudrez peut-être regarder movew. - Marcello Romani
Aussi, bind-key L swap-window -t -1 pour en faire la dernière fenêtre. - w17t
Pour différence de swapw -s number et swapw -t number pour permuter la fenêtre actuelle, voir ma réponse ici. - qeatzy


En ajoutant à la réponse de Gareth, vous pouvez utiliser les raccourcis clavier suivants

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

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


210
2018-02-15 11:18



Ce -1 et +1 la syntaxe aide à résoudre le problème des indices occupés. tmux déplacera les autres fenêtres pour vous et retournera automatiquement à la fin / début. C'est la meilleure réponse. - brianpeiris
C'est pieux! Merci. - Bruno Buccolo
Mon incapacité à déplacer facilement les fenêtres tmux me gêne depuis quelques semaines. Cela rend tellement plus facile de gérer les fenêtres! Merci beaucoup de cette récente conversion tmux. - calvinf
Bon conseil, préférez bind-key S-Left swap-window -t -1, je peux donc faire <prefix> shift + arrow, car je n'aime pas déconner les raccourcis clavier pour les programmes. - demure
Si vous utilisez des lettres, vous devez utiliser une lettre majuscule et non C-S, comme ceci: bind-key -n C-H swap-window -t -1 - Matthew Mitchell


Le tmux équivalent à :number 42 est :move-window -t 42.


60
2018-04-05 22:12



Ceci est lié à C-b. - vedang
Merci! C'est beaucoup mieux que la réponse acceptée imo. - Ashe
@ArlenCuss En fait, les deux réponses sont bonnes et utiles. Vous voyez, en utilisant screen: number, vous pouvez permuter les fenêtres en utilisant tmux: move-window vous ne pouvez déplacer la fenêtre que si l'index cible n'est pas utilisé. Donc, imo, les deux: swap-window et: move-window sont nécessaires pour saisir le contrôle des emplacements de la fenêtre :) - Victor Farazdagi
+1 pour obtenir une réponse d'un gourou de la programmation (également pour être correct). C'est le seul moyen de le faire fonctionner sur une fenêtre active - engineerDave
tmux :move-window est ne pas équivalent à l'écran :number. :number swaps si la destination existe, :move-window échoue dans ce cas. Vous devez choisir entre :move-window et :swap-window - piec


Vous pouvez implémenter un équivalent à screen's number commande utilisant un script shell externe qui choisit entre swap-window et move-window. Vous pouvez le lier à une clé 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

12
2018-04-16 15:42



Très belle solution, fonctionne très bien! Je viens de faire des modifications mineures pour nettoyer et supprimé le -F option qui n'est pas acceptée par ma version tmux. - haridsv


Je renumérote les fenêtres comme ceci:

Ctrl+b, ., 222

ferait le courant tmux fenêtre (tous les volets) numéro 222.


En relation: Quand je traîne des choses autour de moi, j'ai tendance à vouloir

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

et de là je peux aussi utiliser Ctrl+b, ., reading déplacer la fenêtre actuelle (tous les volets à la fois) sur la session de lecture. Vous pouvez naviguer parmi les sessions avec Ctrl+b, s la façon dont vous navigueriez dans la session en utilisant Ctrl+b, w.

HTH


10
2017-07-09 22:16





Utiliser la fenêtre d'échange pour passer à n'importe quel identifiant: [le plus proche de l'écran: numéro]

# window movement / renumbering like in screen's :number
bind-key m command-prompt -p "move window to:"  "swap-window -t '%%'"

[m pour déplacer -> appuyez sur préfixe-m et entrez dire 3. .pour renuméroter la fenêtre à 3]


8
2017-12-12 03:13



C’est déjà bien, mais ce serait encore mieux: faites un swap-window et s’il échoue, retournez à la fenêtre de déplacement - nisc


Depuis la réponse d'Ashish Ariga ne fonctionne pas sur la version 1.9a et ci-dessous. j'utilise < et > permuter la fenêtre à gauche et à droite, respectivement, en ajoutant la ligne ci-dessous à .tmux.conf.

# swap window to left or right
bind-key -r < swap-window -t -1
bind-key -r > swap-window -t +1

5
2018-03-18 17:08





Pour ceux qui utilisent byobu En tant que wrapper pour tmux, vous pouvez échanger la fenêtre en cours avec la fenêtre précédente ou suivante avec:

Ctrl-Shift-F3
Ctrl-Shift-F4

La liaison de clé définie par byobu pour ces clés peuvent être d'intérêt:

bind-key -n    C-S-F3 swap-window -t :-1
bind-key -n    C-S-F4 swap-window -t :+1

3
2018-01-26 00:48



Serait un raccourci pour déplacer des fractionnements dans une certaine fenêtre. - Pablo Bianchi


L'approche que j'utilise combine un peu de la réponse d'Ashish avec les éléments; J'ai des flèches alt-left et right liées à une petite légende qui déplace la fenêtre une vers la gauche ou la droite, sauf si c'est la première ou la dernière fenêtre, respectueusement. Je l'ai fait parce que, lorsque vous émettez un swap +1 à la dernière fenêtre (ou que vous échangez -1 à la première fenêtre), il échange toujours, au lieu de revenir en boucle comme vous vous en doutez:

0:one 1:two 2:three 3:zero*

Devient

0:zero* 1:two 2:three 3:one

Au lieu de

0:zero* 1:one 2:two 3:three

Ainsi, les commandes que j'utilise cessent de fonctionner lorsque la fenêtre a atteint le bord de la liste:

bind-key -n M-Left run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -t -1'
bind-key -n M-Right run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -t +1'

Cela peut facilement être combiné avec indice de base et renumérotation d'avoir une liste de fenêtres qui commencent à un nombre arbitraire et qui n'ont jamais de lacunes.

Si vous utilisez indice de base 1 comme moi et que vous ne pensez pas que vous allez jamais dépasser les 999 fenêtres, vous pouvez utiliser un petit truc pour le faire rouler correctement, bien que les commandes gonflent un peu:

set -g base-index 1
set -g renumber-windows on
bind-key -n M-Left 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 -t -1 ; fi'
bind-key -n M-Right 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 -t +1 ; fi'

Cela fonctionne en déplaçant temporairement la dernière fenêtre sur l'index-0 inutilisé, puis en appelant déplacer-fenêtre -r pour les renuméroter à partir de 1 à nouveau. Cela fonctionne de la même manière lorsque vous déplacez la première fenêtre à la fin; en choisissant un grand nombre que vous n'utiliserez jamais, cela garantit que lorsque déplacer-fenêtre -r tire à nouveau tout sera numéroté comme prévu. Si vous vous posez des questions sur refresh-client -S, cela est nécessaire parce que parfois, lors de la réorganisation de déplacer la fenêtre fonctionnera correctement, la barre d'état ne sera pas mise à 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 peux trouver avec cette approche est que fenêtre d'échange implicitement modifier la dernière fenêtre utilisée à celle avec laquelle vous avez échangé. Ainsi, si vous êtes sur la fenêtre n ° 1, passez à la fenêtre quatre et déplacez-la en arrière, vous constaterez que votre dernière fenêtre utilisée est la nouvelle n ° 4 (anciennement n ° 3) au lieu de n ° 1. Il ne semble pas y avoir de moyen de contourner cela.


2
2018-06-24 20:29





La solution la plus simple de man, est d'utiliser les liaisons par défaut:

{           Swap the current pane with the previous pane.
}           Swap the current pane with the next pane.

1
2018-02-09 12:34



Les fenêtres et les panneaux de tmux sont différents. - Marcello Romani
Cela m'a toujours aidé à obtenir ce que je voulais - lkraav
Cette question concerne les fenêtres et non les volets - mbigras


vous pouvez utiliser base-index pour changer le numéro de départ de vos fenêtres. si vous définissez base-index à 1, puis move-window -r renuméroter toutes les fenêtres à partir de 1, libérant ainsi 0 pour déplacer une fenêtre dans son emplacement:

set base-index 1
move-window -r
move-window -t 0

une fois terminé, vous pouvez réinitialiser base-index à 0 si vous voulez utiliser move-window -r plus tard sans déplacer votre fenêtre à 0


1
2017-12-13 06:50