web-dev-qa-db-fra.com

Comment masquer un volet tmux?

J'ai 3 volets dans ma fenêtre tmux:

--------------------------
|             |      2   |
|             |          |
|        1    |----------|
|             |      3   |
|             |          |
--------------------------

Les volets 1 et 2 ont vim. Le volet 3 exécute un cli que je développe. Parfois, je veux comparer les volets 1 et 2, donc je veux masquer le volet 3:

--------------------------
|             |          |
|             |          |
|        1    |       2  |
|             |          |
|             |          |
--------------------------

puis ramenez à nouveau le volet 3. Je ne veux pas tuer le volet 3 car j'ai installé certaines choses là-bas et je ne veux pas les reconstituer.

  • Y a-t-il quelque chose de similaire à PREFIX + z qui peut zoomer sur le volet 2 mais sans toucher le volet 1? Ou
  • Existe-t-il un moyen de masquer rapidement le volet 3 et de le réactiver en cas de besoin?
63
user881300

Utilisez le break-pane et join-pane commandes. Faire référence à man tmux pour les détails, les options et l'utilisation.


Masquer le volet 3:

Sélectionnez le volet 3 et entrez Prefix-:break-pane -dP.

tmux enverra le volet 3 vers une fenêtre en arrière-plan (le -d flag) et imprimer des informations à ce sujet dans le volet 2 (le -P drapeau). Par défaut, vous verrez quelque chose comme 1:2.0 (sens: session:window.pane). Frappé q pour continuer à travailler.1

1Avec un peu de pratique, vous pourrez supprimer le -P flag puisque vous pouvez prédire le session:window.pane triplet: session par défaut à la session en cours et pane par défaut à 0 tandis que window sera le prochain identifiant de fenêtre libre.

Récupérez le volet 3:

Pour obtenir le volet 3 et la disposition en arrière, sélectionnez le volet 2 et problème Prefix-:join-pane -vs 1:2.0 dire à tmux de diviser le volet 2 verticalement (-v) et pour rejoindre le volet (source) (-s) avec l'identifiant 1:2.0. Vous pouvez éventuellement supprimer l'identifiant session ou pane. Notez également que tmux stocke un historique de ligne de commande, facilement accessible avec Prefix-:-Up.

Vous aurez probablement besoin de temps pour vous familiariser avec cela, mais une fois que vous l'aurez fait, vous pourrez sûrement trouver des raccourcis clavier personnalisés qui vous conviennent.


Cette question contient des informations utiles et des astuces qui pourraient améliorer votre flux de travail.

76
user78291

Une idée: lancez tmux dans tmux.

Configuration d'origine:

Volet 1 et volet 2; cote à cote. Exécutez vim dans le volet 1 comme d'habitude.

Dans le volet 2, exécutez à nouveau tmux et créez deux volets (l'un au-dessus de l'autre cette fois). Exécutez ensuite vim dans le volet 2.1 et votre CLI dans le volet 2.2. Cela devrait vous permettre d'afficher le volet plein écran 2.1 avec votre deuxième instance de Vim, ce qui entraînera le comportement souhaité.

5
BinaryBen

Au lieu de masquer le volet 3, vous pouvez également tricher un peu et le rendre très petit, ce qui fonctionnera probablement également pour votre cas.

Lorsque le volet 2 est le volet actif, vous pouvez

PREFIX : resize-pane -D 40

Ensuite, pour le remonter, vous pouvez soit

PREFIX : resize-pane -D 28

où vous auriez à remplacer 28 par un nombre décent, ou, à la place, vous pourriez essayer PREFIXEsc4, qui effectue un redimensionnement automatique.

3
Bernhard

J'ai maintenant cette question a presque 5 ans mais je l'ai juste trouvée parce que je voulais faire quelque chose de similaire et j'ai trouvé les raccourcis clavier suivants grâce à réponse de user78291 :

bind-key ! break-pane -d -n _hidden_pane
bind-key @ join-pane -s $.1

De cette façon, je peux utiliser Prefix! pour masquer le volet actuel et Prefix@ pour le ramener. La partie agréable est que je peux masquer plusieurs volets de cette façon.

C'est loin d'être parfait, mais cela fait le travail de cacher les vitres et de les ramener assez bien.

2
Filipe Kiss

Je sais que cela ne masque pas réellement le volet sur lequel vous travaillez, mais j'essayais de le faire pour empêcher tmux d'envoyer des commandes communes aux fenêtres sélectionnées et j'ai trouvé une solution beaucoup plus simple.

Si vous ne souhaitez pas masquer visuellement le volet, mais souhaitez simplement arrêter toute entrée dans le volet. Un scénario pourrait être que vous souhaitiez envoyer une commande à 5 volets ouverts mais que vous ne vouliez pas l'envoyer à 2 d'entre eux.

Dans ce cas d'utilisation, vous pouvez faire ctrl + s sur les volets auxquels vous ne voulez pas que les commandes aillent (ctrl + s verrouille toutes les entrées du volet).

Une fois que vous avez terminé, appuyez sur ctrl + c pour revenir.

Remarque: N'appuyez pas sur ctrl + q après les commandes car il exécutera toutes les commandes sur cet écran. ctrl + c ne le fera pas (essayé cela sur Ubuntu).

0
Fake Jon Skeet