Déplacement du volet tmux vers la fenêtre

228

Comment déplacer un volet existant dans une autre fenêtre de tmux lorsque j'ai plusieurs fenêtres et vice versa?

Je viens de l' écran , où je peux passer au volet puis changer de fenêtre jusqu'à atteindre celui que je veux; tmux ne semble pas le permettre.

mrlanrat
la source

Réponses:

209

La commande pour faire cela est join-panedans 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.confpour cela:

# 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 lançant ce qui suit dans la session:

$ tmux source-file ~/.tmux.conf
jasonwryan
la source
J'essaie cette méthode, mais lorsque je mets votre code dans mon fichier .tmux.conf et que je fais Ctrl-b, j, rien ne semble se passer.
mrlanrat
2
Vous avez besoin d' au moins 2 fenêtres ouvertes, avec vitres couple dans chaque: puis appuyez sur Prefix+set entrez le nom de la fenêtre à l'invite d'envoyer le volet de cette fenêtre ...
jasonwryan
Je n'ai toujours pas de chance avec ça, rien ne se passe. J'ai l'impression que tmux ne lit pas le fichier .tmux.conf car il ne répond pas du tout à Ctrl-b, j ou Ctrl-b, s. (ce sont les 2 seules lignes du fichier de configuration)
mrlanrat le
7
@ mrlanrat Je trouve que vous devez préfixer le numéro de la fenêtre avec deux points. Voir ma réponse ci-dessous.
Bruno Bronosky
1
À quoi se réfère le '%%'?
oligofren le
152

rejoindre-volet est la réponse. Moi aussi, j'avais des problèmes avec mes tentatives d'utilisation sur la base de la documentation de tmux. J'ai découvert que les options -t et -s semblent accepter [session]: fenêtre et non [session:]. Autrement dit, la spécification de la session est facultative, mais l'inclusion de: 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 la clé de votre lien, suivie de) ...

:join-pane -s :1

Vous pouvez ensuite les séparer avec le panneau de séparation qui est par défaut: Ctrl-B! Si vous souhaitez le lier à un raccourci, je vous suggère de NE PAS écraser une liaison par défaut telle que s, car à l'avenir, vous rechercherez sur Internet une réponse impliquant choice-session qui ne fonctionnera pas sur votre système. Notez que le volet est lié à! et @ est juste à côté et n’est lié à rien par défaut. Pour cette raison, je suggère cette liaison ...

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 "%%"'

Alternativement, pour toujours rejoindre la fenêtre la plus récemment visitée ...

bind-key @ join-pane -h -s !

REMARQUE: -hCela entraîne l'empilement des volets horizontalement (avec une division verticale) par opposition au comportement par défaut qui est l'inverse.

La chose la plus importante est que votre savoir ce que vous choisissez de raccourcir. Parce que si vous le définissez et que vous l'oubliez, vous serez pris au dépourvu lorsque vous vous retrouverez sur un serveur étranger. Et, avouons-le, le multiplexeur de terminaux vous donne essentiellement des sessions fiables sur des serveurs distants.

Ceci termine ma conversion de GNU Screen à Tmux. Je ne regarderai jamais en arrière.

Prendre plaisir!

Bruno Bronosky
la source
2
J'avais aussi manqué le ':' ... merci pour ça.
Rascalking
J'ai eu 2 votes bas sur ce récemment avec aucun commentaire suggérant pourquoi. C'est juste la culture grossière et anti-FOSS.
Bruno Bronosky
1
la documentation ne parle pas du tout de deux points! Nice one
JonnyRaa
1
Utiliser la syntaxe à point est ce qui m'a aidé, window.panepar exemple, join-pane -s 1.0à déplacer le volet 0 de la fenêtre 1 dans la fenêtre actuelle. Plus de détails sur maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras
Depuis tmux 2.1, :apparemment ce n’est plus nécessaire (par exemple, il suffit de le faire :join-pane -s 1). C’était peut-être un bogue des versions précédentes
villapx
38

Je pense que j'aime mieux ce que j'ai utilisé pour déplacer les vitres 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 y associer une touche ou alias facilement, aucun script n'est requis.

Joshua K
la source
2
+1 J'ai tendance à l'utiliser beaucoup plus souvent que join-pane.
Chris B
14

Si vous ne voulez pas taper l'identifiant de 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.

Bernhard T
la source
1
Quelle version utilisez-vous? Je commence unknown command: join-pane -s !avec 1.6.
Paradroid
Utiliser 2.0 ici, mais mettre la ligne dans la conf sans guillemets semble bien fonctionner. bind-key j join-pane -s !
bkzland
13

Après avoir parcouru les autres réponses et parcouru la page de manuel de tmux, je me suis concentré 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 de manière interactive la fenêtre à rejoindre et de refléter mes minuscules s/ vliaisons 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.

toupeira
la source
C'est très utile. Je vous remercie. Malheureusement, les -vet -hne créent pas de "divisions" verticales et horizontales. Ils créent respectivement des " panneaux empilés " verticaux et horizontaux . (C'est-à-dire que les panneaux empilés verticalement sont divisés horizontalement.) Vous devez donc entraîner votre cerveau de cette façon. Il -vs’agit également de la valeur par défaut. Par conséquent, je l’oublierais et ne la -hplacerais que pour que vous ~/.tmux.confagissiez comme aide-mémoire.
Bruno Bronosky
J'aime mieux cela que les autres réponses pour "le contraire de break-pane". Ayant cassé temporairement un volet dans sa propre fenêtre, je souhaite le renvoyer ultérieurement à l’une des fenêtres les plus anciennes, qui le gère avec élégance.
Stabledog
13

Reliure à clé

Par défaut, Ctrl+ b, !serait briser le volet actif dans une nouvelle fenêtre et basculer vers elle.

Ctrl+ best le préfixe par défaut pour .

Détails

La tmuxcommande exécutée par cette clé est break-pane(alias:) breakptelle qu’elle est implémentée cmd-break-pane.cet liée par défaut dans key-bindings.c, comme indiqué dans le résultat de la commande list-keys(alias lsk:):

bind-key    -T prefix       !                 break-pane
muru
la source
4

Vous n'êtes pas obligé de changer vos raccourcis clavier.

Alors que le volet que vous souhaitez déplacer a le focus, tapez Prefix puis :join-pane -t :1où se 1trouve quel que soit le numéro de la fenêtre de destination se trouvant dans la même session. Vous pouvez le déplacer vers une autre session en ajoutant son nom, par exemple, comme suit project:3. Pour moi, join-panetab-auto complète de j.

Ajoutez un élément -hou un -vcommutateur à la commande pour définir l’orientation du nouveau fractionnement créé dans la destination, ou cliquez simplement sur le lien et préfixe + spacepour le réorganiser.

Walf
la source