Wie versteckst du ein tmux-Fenster?

59

Ich habe 3 Fenster in meinem tmux-Fenster:

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

Die Scheiben 1 und 2 haben vim. In Bereich 3 wird ein Client ausgeführt, den ich entwickle. Manchmal möchte ich die Bereiche 1 und 2 vergleichen, also möchte ich Bereich 3 ausblenden:

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

und dann wieder Scheibe 3 bringen. Ich möchte Fenster 3 nicht beenden, da ich einige Dinge dort eingerichtet habe und sie nicht erneut einrichten möchte.

  • Gibt es etwas, PREFIX + zdas dem Zoom-Bereich 2 ähnelt, jedoch nicht den Bereich 1 berührt? Oder
  • Gibt es eine Möglichkeit, Teilfenster 3 schnell auszublenden und bei Bedarf wieder aufzurufen?
user881300
quelle

Antworten:

71

Verwenden Sie die Befehle break-paneund join-pane. Siehe man tmuxfür Details, Optionen und Nutzung.


Fenster 3 ausblenden:

Bereich auswählen 3und eingeben Prefix- :break-pane -dP.

tmuxSendet den Bereich 3an ein Fenster im Hintergrund (die -dFlagge) und druckt einige Informationen dazu in Bereich 2 (die -PFlagge). Standardmäßig sehen Sie so etwas wie 1:2.0(Bedeutung:) session:window.pane. Hit qum weiter zu arbeiten. 1

1 Mit etwas Übung können Sie das -PFlag ablegen, da Sie das session:window.paneTriplet vorhersagen können : sessionStandardmäßig wird die aktuelle Sitzung verwendet, und paneStandardmäßig wird 0while windowdie nächste freie Fensterkennung sein.

Holen Sie sich Pane 3 zurück:

Um Scheibe 3und das Layout zurück, wählen Sie Bereich 2und Ausgabe Prefix- :join-pane -vs 1:2.0sagt tmuxaufzuspalten Bereich 2vertikal ( -v) und die (Quelle) Scheibe (beitreten -s) mit der Kennung 1:2.0. Optional können Sie entweder die sessionoder die paneKennung löschen. Beachten Sie auch, dass tmux einen Befehlszeilenverlauf speichert, auf den Sie bequem mit Prefix- :- zugreifen können Up.

Sie werden wahrscheinlich einige Zeit brauchen, um den Dreh raus zu kriegen, aber sobald Sie dies tun, werden Sie sicherlich in der Lage sein, benutzerdefinierte Tastenzuordnungen zu finden, die für Sie bequem sind.


Diese Frage enthält einige nützliche Informationen und Tricks, die Ihren Workflow verbessern können.

user78291
quelle
Klare Anweisungen! Funktioniert reibungslos für mich, viel besser als meine Antwort!
Bernhard
Standardmäßig wird der Bereich 3 in das letzte Fenster aufgeteilt. Wenn Sie in der aktuellen Sitzung bereits 3 Fenster haben, wird der Bereich zu Fenster 3 (vorausgesetzt, das Fenster beginnt bei 0). Die 3 in "Fenster 3" hängt also von ab Wie kann ich diese Funktion in den geöffneten Fenstern in benutzerdefinierten Tastenkombinationen ausführen?
CodyChan
5

Eine Idee: Führen Sie tmux in tmux aus.

Ursprüngliche Einrichtung:

Teilfenster 1 und Teilfenster 2; Seite an Seite. Führen Sie vim wie gewohnt in Bereich 1 aus.

Führen Sie in Bereich 2 tmux erneut aus und erstellen Sie zwei Bereiche (diesmal übereinander). Führen Sie dann vim in Bereich 2.1 und Ihre CLI in Bereich 2.2 aus. Dies sollte es Ihnen ermöglichen, den Bereich 2.1 mit Ihrer zweiten Instanz von Vim als Vollbild anzuzeigen, was zu dem gewünschten Verhalten führt.

BinaryBen
quelle
das nenne ich out of box thinking!
user881300
Danke user881300. Es hat einige Mängel (das Senden von Befehlen hat einige Macken für zB). Ich hoffe, dies zu einer vollständigeren Antwort zu aktualisieren, sobald ich es getestet habe - ich brauche selbst ähnliche Funktionen.
BinaryBen
2
@ user881300 Technisch ist dies Box in Box zu denken.
Mateen Ulhaq
3

Anstatt Scheibe 3 zu verstecken, könnten Sie auch ein bisschen schummeln und sie sehr klein machen, was wahrscheinlich auch für Ihren Fall funktionieren wird.

Wenn Bereich 2 der aktive Bereich ist, können Sie

PREFIX : resize-pane -D 40

Um es wieder nach oben zu bewegen, können Sie entweder

PREFIX : resize-pane -D 28

Wobei Sie 28 durch eine anständige Zahl ersetzen müssten, oder Sie könnten stattdessen versuchen PREFIXEsc4, die Größe automatisch zu ändern.

Bernhard
quelle
Ich habe die Größe des Fensters geändert, set -g mouse-resize-pane onaber außer der Größe haben wir noch eine andere Option?
User881300
@ user881300 Ich bin keineswegs ein tmuxExperte, aber ich wäre gespannt zu erfahren, ob dies möglich ist.
Bernhard
1
CTRL+B, ALT+<arrow direction to resize>, als CTRL+B, ESC, 4(thx @Bernhard), um es wiederherzustellen.
FelikZ
1

Ich bin jetzt fast 5 Jahre alt, aber ich habe es gerade gefunden, weil ich etwas Ähnliches machen wollte und dank der Antwort von user78291 die folgenden Tastenkombinationen gefunden habe :

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

Auf diese Weise kann ich Prefix!den aktuellen Bereich ausblenden und Prefix@wieder einblenden. Das Schöne daran ist, dass ich auf diese Weise mehrere Fenster ausblenden kann.

Es ist alles andere als perfekt, aber es macht den Job, Scheiben zu verstecken und sie ganz gut zurückzubringen.

Filipe Kiss
quelle
0

Ich weiß, dass der Bereich, an dem Sie gerade arbeiten, dadurch nicht wirklich ausgeblendet wird, aber ich habe versucht, tmux daran zu hindern, allgemeine Befehle an ausgewählte Fenster zu senden, und bin zu einer viel einfacheren Lösung gekommen.

Wenn Sie den Bereich nicht visuell ausblenden möchten, sondern nur verhindern möchten, dass Eingaben in den Bereich gelangen. Ein Szenario könnte sein, dass Sie einen Befehl an 5 offene Bereiche senden, ihn aber nicht an 2 von ihnen senden möchten.

In diesem Anwendungsfall können Sie ctrl + sin den Bereichen festlegen, dass die Befehle nicht aufgerufen werden sollen ( ctrl + salle Eingaben im Bereich werden gesperrt).

Wenn Sie fertig sind, drücken Sie ctrl + c, um wieder herauszukommen.

Hinweis : Drücken Sie nicht ctrl + qnach den Befehlen, da sonst alle Befehle auf diesem Bildschirm ausgeführt werden. ctrl + cwerde dies nicht tun (versucht dies auf Ubuntu).

Gefälschter Jon Skeet
quelle