Comment déplacer un volet existant dans une autre fenêtre dans tmux lorsque j'ai plusieurs fenêtres, et vice versa?
Je viens de écran, où je peux basculer vers le volet puis changer de fenêtre jusqu'à ce que j'arrive à celui que je veux; tmux ne semble pas le permettre.
La commande pour ce faire est join-pane
dans tmux 1.4.
join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane] (alias: joinp) Like split-window, but instead of splitting dst-pane and creating a new pane, split it and move src-pane into the space. This can be used to reverse break-pane.
Pour simplifier cela, j'ai ces liens dans mon .tmux.conf
pour ça:
# pane movement
bind-key j command-Prompt -p "join pane from:" "join-pane -s '%%'"
bind-key s command-Prompt -p "send pane to:" "join-pane -t '%%'"
Le premier saisit le volet de la fenêtre cible et le joint au courant, le second fait l'inverse.
Vous pouvez ensuite recharger votre session tmux en exécutant ce qui suit à partir de la session:
$ tmux source-file ~/.tmux.conf
le volet de jointure est la réponse. Moi aussi, j'avais des problèmes avec mes tentatives de l'utiliser sur la base de la documentation tmux. J'ai découvert que le -t
et -s
les commutateurs semblent accepter [session]:window
et pas [session:]window
. Autrement dit, la spécification de la session est facultative, mais inclut le :
est obligatoire. (J'utilise tmux 1.5)
Par conséquent, afin d'ajouter un volet à la fenêtre actuelle et de placer la fenêtre 1 dans le volet, la commande serait (Ctrl+B ou quelle que soit votre clé de liaison, suivie de) ...
:join-pane -s :1
Vous pouvez ensuite les séparer avec break-pane qui par défaut est: Ctrl+B! Si vous souhaitez le lier à un raccourci, je suggère de ne PAS remplacer une liaison par défaut comme s, car en cours de route, vous chercherez sur Internet une réponse qui implique le choix d'une session et cela ne fonctionnera pas sur votre système. Notez que le volet de rupture est lié à ! et @ est juste à côté et n'est lié à rien par défaut. Pour cette raison, je suggère cette reliure ...
bind-key @ command-Prompt -p "create pane from:" "join-pane -s ':%%'"
Alternativement, pour avoir un sélecteur interactif ...
bind-key @ choose-window 'join-pane -h -s "%%"'
bind-key C-@ choose-window 'join-pane -s "%%"'
Alternativement, pour toujours rejoindre la dernière fenêtre visitée ...
bind-key @ join-pane -h -s !
Noter la -h
le fait empiler les volets horizontalement (avec une division verticale) par opposition au comportement par défaut qui est l'inverse.
La chose la plus importante est que vous APPRENEZ tout ce que vous choisissez de raccourcir. Parce que si vous le définissez et l'oubliez, vous serez guipé lorsque vous vous retrouverez sur un serveur étranger. Et avouons-le, la chose la plus importante qu'un multiplexeur de terminal vous offre est des sessions fiables sur des serveurs distants.
Ceci termine ma conversion de GNU Screen to Tmux. Je ne regarderai jamais en arrière.
Prendre plaisir!
Je pense que j'aime mieux ce que j'ai utilisé pour déplacer les volets vers leur propre fenêtre. j'utilise
break-pane -t :
Je l'ai compris par expérimentation, mais cela semble très bien fonctionner. Vous pouvez facilement associer les clés ou les alias, aucun script requis.
Par défaut, Ctrl+b, ! serait casser le volet actif dans une nouvelle fenêtre et basculer vers elle.
Où Ctrl + b est la valeur par défaut préfixe pour tmux .
La commande tmux
que cette touche exécute est break-pane
(alias: breakp
) tel qu'implémenté dans cmd-break-pane.c
et lié par défaut dans key-bindings.c comme vu dans list-keys
(alias: lsk
) sortie de la commande:
bind-key -T prefix ! break-pane
Si vous ne souhaitez pas saisir l'identifiant du volet dans une invite, vous pouvez également utiliser
bind-key j "join-pane -s !"
qui joindra le dernier volet/fenêtre actif à la fenêtre actuelle.
Après avoir parcouru les autres réponses et parcouru la page de manuel tmux, je me suis fixé pour l'instant sur les liaisons suivantes:
bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'
Cela vous permettra de sélectionner interactivement la fenêtre à joindre et de mettre en miroir mes liaisons minuscules s
/v
pour créer de nouvelles divisions verticales/horizontales. Si quelqu'un sait comment sélectionner des volets individuels au lieu de fenêtres, faites-le moi savoir.
Vous n'avez pas besoin de modifier vos raccourcis clavier.
Pendant que le volet que vous souhaitez déplacer a le focus, tapez Prefix puis :join-pane -t :1
où 1
est le numéro de la fenêtre de destination dans la même session. Vous pouvez le déplacer vers une autre session en ajoutant son nom comme project:3
. Pour moi join-pane
tabulation automatique à partir de j
.
Ajoutez un -h
ou -v
passez à la commande pour définir l'orientation du nouveau split créé dans la destination, ou allez simplement dessus et Prefix + space pour réorganiser.