web-dev-qa-db-fra.com

Déplacer le volet tmux vers la fenêtre

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.

241
mrlanrat

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
221
jasonwryan

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!

167
Bruno Bronosky

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.

45
Joshua K

Reliure à clé

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 .

Détails

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
15
user86041

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.

14
Bernhard T

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.

14
toupeira

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 :11 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 Prefixspace pour réorganiser.

4
Walf