Spiegeln eines Fensters zwischen zwei Fenstern

14

Kann derselbe Bereich in zwei verschiedenen Fenstern einer einzigen tmux-Sitzung angezeigt werden?

Normalerweise habe ich in meinem Hauptfenster eine horizontale Aufteilung mit vim im oberen Bereich (ca. 80-90% der Terminalhöhe) und einer Befehlszeile im unteren Bereich, in der ich das Programm ausführe, an dem ich arbeite. Da das untere Fenster so klein ist, kann ich häufig keine Fehlerausgabe sehen, und die Verwendung der Tastenkombinationen von tmux zum Zurückblättern wird mühsam. Ich möchte, dass mein zweites Fenster an denselben Bereich angehängt wird, damit ich, wenn ich mehr von meiner Fehlerausgabe sehen möchte, einfach schnell zum zweiten Fenster wechseln kann, ohne dass ich mich um einen Bildlauf kümmern muss. Ist das möglich?

(Ich denke, ein Fallback wäre, etwas wie tee zu verwenden, um stdout in eine Protokolldatei zu schreiben und das in meinem zweiten Fenster zu vermerken. Ich hoffe, dass das nicht notwendig ist.)

Will Norris
quelle

Antworten:

7

Standardmäßig können Sie den "Zoom-Status" eines Fensters durch Drücken von Prefixund umschalten z(das Standardpräfix lautet Ctrl+B).

Dadurch nimmt der aktuelle Bereich (z. B. der Befehlszeilenbereich) das gesamte Fenster ein. Drücken Prefixund zwieder auf „unzoom“ die Scheibe.

Kusalananda
quelle
10

Ich befürchte, dies ist eines der Dinge, die Sie nicht tun können tmux(ich würde erwarten, dass die Probleme mit einem Fenster, das in mehreren Räumen unterschiedlicher Größe angezeigt wird, der Hauptgrund sind). Sie können dies jedoch auf verschiedene Arten umgehen, indem Sie bestimmte Aktionen an bestimmte Tastenkombinationen binden. Da viel vom verwendeten Layout abhängt, erleichtert es Ihnen das Leben erheblich , nur ein einfaches Layout mit zwei Fenstern zu haben, von denen Sie sprechen

  1. rotate-window - Es werden nur die Fenster getauscht, so dass Sie 80% -90% für die Befehlsausgabe (und das kleine Fenster für ViM) erhalten.

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

  3. pipe-panemit commandungepufferter Umleitung zu einem Named Pipe (dh ein Dateisystem mit Knoten erzeugt wird mkfifo) - dann verwenden , tail -fdass benannte Pipe in der anderen Scheibe.

  4. Leiten Sie den Ausgang an less, der auch den Folgemodus tailhat (mindestens den GNU- Modus ).

  5. resize-pane -ZAuf der kleineren Anzeige wird der Vollbildmodus vergrößert. Durch das anschließende Deaktivieren des Zooms bleibt die Funktion aktiviert, sodass ein wenig Trick erforderlich ist, damit die Funktion problemlos ausgeführt werden kann.

peterph
quelle
2
Übrigens: "Ich würde erwarten, dass das Problem, dass ein Fenster in mehreren Bereichen unterschiedlicher Größe angezeigt wird, der Hauptgrund ist." Dies mag ein Faktor für die Komplexität der Implementierung sein, aber tmux unterstützt auf Fensterebene über Gruppierung dasselbe sessions unix.stackexchange.com/questions/24274/… . Es fügt dem kleineren Fenster einfach Auffüllungen hinzu. Theoretisch könnte das Spiegeln von Fenstern auf die gleiche Weise erfolgen.
Mahemoff
Hm ... du hast recht, das könnte ein Weg sein, es zu tun.
Peterph
1

Sie können ein Skript verwenden, um Ihre Pseudositzung in einer Datei und dann tailin einer Datei in einem zweiten Fenster auszugeben .

In Ihrem Arbeitsbereich.

script -f tailme.out

Und in Ihrem Anzeigebereich.

tail -f tailme.out
slimisjim
quelle
1

Ich stimme anderen zu, dass für Ihren Fall Prefix+ zdie direkteste Lösung wäre, aber für die allgemeine Frage des Spiegelns eines Fensters gibt es einen kleinen Hack, der funktionieren könnte - das Verschachteln einer Bildschirmsitzung in tmux.

Installieren Sie gnu screen und starten Sie es für den Bereich, den Sie spiegeln möchten. Dann screen -xin anderen Scheiben anbringen.

Sie können auch eine andere tmux-Sitzung in den Bereich einbinden, wenn Sie möchten, aber tmux-Sitzungen sollten sorgfältig verschachtelt werden.

Matthew
quelle