mise en miroir d'un volet entre deux fenêtres

14

Est-il possible que le même volet apparaisse dans deux fenêtres différentes d'une même session tmux?

J'ai généralement un seul fractionnement horizontal dans ma fenêtre principale avec vim dans le volet supérieur (environ 80 à 90% de la hauteur du terminal) et une ligne de commande dans le volet inférieur où j'exécute le programme sur lequel je travaille. Parce que la fenêtre du bas est si petite, je ne vois souvent pas de sortie d'erreur, et utiliser les raccourcis clavier de tmux pour revenir en arrière devient fastidieux. Je voudrais que ma deuxième fenêtre soit attachée au même volet afin que si j'ai besoin de voir plus de ma sortie d'erreur, je puisse simplement passer rapidement à la deuxième fenêtre sans avoir à gérer le retour en arrière. Est-ce possible?

(Je suppose qu'une solution de rechange serait d'utiliser quelque chose comme tee pour écrire stdout dans un fichier journal et la queue dans ma deuxième fenêtre. J'espère que ce n'est pas nécessaire cependant)

Will Norris
la source

Réponses:

7

Par défaut, vous pouvez basculer "l'état de zoom" d'un volet en appuyant sur Prefixet z(le préfixe par défaut est Ctrl+B).

Cela fera que le volet actuel (votre volet de ligne de commande, par exemple) occupera toute la fenêtre. Appuyez sur Prefixet à znouveau pour « dézoomer » le volet.

Kusalananda
la source
10

Je crains que ce soit l'une des choses que vous ne pouvez pas faire tmux(je m'attends à ce que les problèmes avec un volet affiché dans plusieurs espaces de tailles différentes soient la principale raison). Cependant, il existe plusieurs façons de contourner ce problème, toutes basées sur la liaison de certaines actions à certaines combinaisons de touches. Comme beaucoup dépend de la mise en page que vous utilisez, juste après avoir une mise en page simple avec deux volets vous rendre votre mentionner est la vie beaucoup plus facile

  1. rotate-window - il ne fera qu'échanger les volets, vous donnant ainsi 80% -90% pour la sortie de la commande (et la petite fenêtre pour ViM).

  2. break-pane contre. join-pane -v -p <preview_percentage> -t !

  3. pipe-paneavec commandune redirection sans tampon vers un canal nommé (c'est-à-dire un nœud de système de fichiers créé avec mkfifo) - puis utilisez tail -fce canal nommé dans l'autre volet.

  4. diriger la sortie vers less, qui a également le mode de suivi qui taila (au moins celui GNU).

  5. resize-pane -Zsur le petit panneau l'agrandira sur le terminal complet. Le dé-zoom ultérieur le gardera actif, donc un peu de ruse est nécessaire pour le faire fonctionner confortablement.

peterph
la source
2
BTW - "Je m'attendrais à ce que les problèmes avec un volet affiché dans plusieurs espaces de tailles différentes soient la principale raison" Cela pourrait être un facteur de la complexité de sa mise en œuvre, mais tmux prend en charge la même chose au niveau de la fenêtre, via groupé sessions unix.stackexchange.com/questions/24274/… . Il ajoute simplement un rembourrage ci-dessous à la petite fenêtre. La mise en miroir des volets pourrait théoriquement se faire de la même manière.
mahemoff
Hm ... vous avez raison, cela pourrait être une façon de procéder.
peterph
1

Vous pouvez utiliser un script pour sortir votre pseudo-session dans un fichier puis tailce fichier dans une deuxième fenêtre.

Dans votre volet de travail.

script -f tailme.out

Et dans votre volet de visualisation.

tail -f tailme.out
slimisjim
la source
1

Je suis d'accord avec d'autres que pour votre cas Prefix+ zserait la solution la plus directe, mais pour la question générale de la mise en miroir d'un volet, il y a un peu de piratage qui pourrait fonctionner - imbriquer une session d'écran dans tmux.

Installez l'écran gnu, puis démarrez-le pour le volet que vous souhaitez mettre en miroir. Ensuite, screen -xà fixer dans d'autres volets.

Vous pouvez également imbriquer une autre session tmux dans le volet si vous le souhaitez, mais les sessions tmux doivent être imbriquées avec soin.

Matthieu
la source