Terminal aus einem anderen Fenster in den aktuellen geteilten Bereich in tmux laden

Terminal aus einem anderen Fenster in den aktuellen geteilten Bereich in tmux laden

In GNU Screen kann ich innerhalb eines bestimmten Splits zu jeder beliebigen Fensternummer wechseln. Beispiel:

  • Drücken Sie die Eingabetaste screen, um es zu starten.
  • Drücken Sie Ctrl+, a cum ein neues Fenster zu erstellen. Jetzt gibt es zwei Fenster: Fenster 0 und Fenster 1. Das aktuelle Fenster ist jetzt Fenster 1.
  • Drücken Sie Ctrl+ a Shift+, sum eine neue Teilung zu erstellen.
  • Drücken Sie Ctrl+, a Tabum zur neuen Aufteilung zu gelangen.
  • Drücken Sie Ctrl+ 0, um Fenster 0 in dieser neuen Aufteilung zu laden.

Wie können wir etwas Ähnliches in Tmux machen? Das ist, was ich bisher habe:

  • Drücken Sie die Eingabetaste tmux, um es zu starten.
  • Drücken Sie Ctrl+, b cum ein neues Fenster zu erstellen. Es gibt jetzt zwei Fenster: Fenster 0 und Fenster 1. Das aktuelle Fenster ist Fenster 1.
  • Drücken Sie Ctrl+, b "um einen neuen geteilten Bereich zu erstellen. Der aktuelle Bereich ist jetzt der neue geteilte Bereich.
  • Wie kann ich jetzt die Shell im Fenster 0 in diesen neuen geteilten Bereich laden?

Gibt es eine Möglichkeit, dieses Bildschirmverhalten in tmux zu simulieren?

Antwort1

Tmux unterstützt weder die Anzeige desselben Fensters in zwei verschiedenen Fenstern noch die zweimalige Anzeige desselben Fensters im selben Fenster. Sie können ein ganzes Fenster mit einer Sitzung verknüpfen, ohne es von der ursprünglichen Sitzung zu trennen. Oder Sie können ein Fenster in ein anderes Fenster platzieren, aber dadurch wird das Fenster aus dem ursprünglichen Fenster entfernt.

In Ihrem Beispiel haben Sie bereits einen Bereich erstellt, der den Platz für den gewünschten Bereich freigibt. In diesem Fall können Sie die beiden Bereiche mit swap-panedem Befehl tmux austauschen. Von man 1 tmux:

swap-pane [-dDU] [-s src-pane] [-t dst-pane]
(alias: swapp)

Zwei Bereiche vertauschen. […] -dweist tmux an, den aktiven Bereich nicht zu ändern.

Wenn -sweggelassen wird und ein markierter Bereich vorhanden ist (siehe select-pane -m), wird der markierte Bereich statt des aktuellen Bereichs verwendet.

Es ist sogar noch besser: Wenn -sund -tbeide weggelassen werden und ein markierter Bereich vorhanden ist, werden der markierte Bereich und der aktuelle Bereich vertauscht. Zu jedem beliebigen Zeitpunkt kann es innerhalb des gesamten tmux-Servers höchstens einen markierten Bereich geben.

Wie kann ich jetzt die Shell im Fenster 0 in diesen neuen geteilten Bereich laden?

Navigieren Sie zum Fenster 0 und markieren Sie den Bereich, den Sie verschieben möchten (in Ihrem Beispiel ist es der einzige Bereich dort). Sie tun dies mit RMB (wenn die Maus unterstützt wird) oder prefix m(wobei standardmäßig + prefixist ). Navigieren Sie zurück zum neuen Bereich und rufen Sie auf:Ctrlb

tmux swapp

Die Shell, die Sie aufrufen, tmux swappwird nicht automatisch zerstört, sie befindet sich jetzt im Fenster 0, wo sich vorher der markierte Bereich befand. In Ihrem Beispiel scheinen Sie diese Shell selbst nicht zu benötigen, sondern nur den neuen Bereich. Wenn ja, ziehen Sie stattdessen Folgendes in Betracht. Denken Sie daran , dass effektiv nichts geschieht, tmux swapp && exitwenn kein markierter Bereich vorhanden ist (oder wenn der aktuelle markiert ist) . In diesem Fall wird einfach die Shell beendet.tmux swapptmux swapp && exit

Alternative,stattdessenAnstatt einen neuen geteilten Bereich zu erstellen, können Sie den gewünschten Bereich in einem Schritt in das aktuelle Fenster verschieben.

join-pane [-bdhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]
(alias: joinp)

Wie split-window, aber anstatt es zu teilen dst-paneund einen neuen Bereich zu erstellen, teilen Sie es und verschieben Sie es src-panein den Raum. […]

Wenn -sweggelassen wird und ein markierter Bereich vorhanden ist (siehe select-pane -m), wird der markierte Bereich statt des aktuellen Bereichs verwendet.

Also statt prefix ":

  1. Markieren Sie den Bereich, den Sie verschieben möchten.
  2. Teilen Sie den Bereich, den Sie teilen möchten:

    • entweder mit tmux joinp -vdort in der Shell aufgerufen;
    • oder mit prefix : joinp -v Enter; ​​dies ist insbesondere dann nützlich, wenn sich in dem Bereich, den Sie teilen möchten, keine inaktive Shell befindet (vergessen Sie jedoch nicht, den Bereich zuerst zum aktuellen zu machen).

Die Methode kann zum Aufrufen oder für jeden anderen tmux-Befehl prefix :verwendet werden .swapp

Nachfolgend finden Sie einige Hinweise zur Manipulation von Fenstern außerhalb von tmux. Die Beispiele verwenden, tmux swappaber Sie können es tmux joinpauf ähnliche Weise aufrufen.


swap-paneermöglicht den Austauschbeliebigzwei Fenster innerhalb eines tmux-Servers. Sie können tmux swappsogar von derdraußenvon tmux, ohne Panes manuell zu markieren und zu ändern, wenn Sie wissen, wie Sie die beiden Panes ansprechen, die Sie austauschen möchten. Es kann sein:

tmux swapp -s 0:1.1 -t 0:0.0

Das Format ist session:window.pane, siehe Handbuch, wo es erklärt wird target-pane. Beachten Sie, dass diese nackten Zahlen „relativ“ sind (zumindest der :window.paneTeil, ich bin mir bei der sessionZahl nicht sicher). Der allererste Bereich 0:0.0nach dem Austausch mit 0:1.1wird zu 0:1.1. Andererseits haben tmux-Sitzungen, Fenster und Bereiche ihreeinzigartigBezeichner (mit den Präfixen $, @bzw. %). In Ihrem Fall könnte der Befehl folgendermaßen aussehen:

tmux swapp -s %2 -t %0

Beachten Sie jedoch, dass, wenn der alte Bereich tatsächlich %0bei war 0:0.0und der neue %2bei war 0:1.1, sie nun %0bei 0:1.1bzw. %2bei sind 0:0.0. Die eindeutige Kennung jedes Bereichs ist an den Inhalt (Prozess) des Bereichs „angehängt“ und „reist“ mit ihm. Nicht vorangestellte Kennungen von Bereichen hängen von der Gesamtzahl der Bereiche und ihrer Platzierung innerhalb des Fensters ab.

rename-sessionSie können Sitzungen ( ) und Fenster ( ) benennen rename-window. Dies erleichtert die Identifizierung von Bereichen session:window.pane.


Sie können mehr als einen tmux-Server ausführen. Server werden durch ihre Socket-Pfade ( -LOption) oder Socket-Namen ( -S) identifiziert. Der Standardname ist default. Wenn Sie tmuxtmux ohne diese Optionen aufrufen, wird der richtige Server gefunden (über die TMUXUmgebungsvariable, glaube ich). Wenn Sie tmuxtmux ohne diese Optionen von außerhalb aufrufen, sieht es wie aus tmux -S default. Möglicherweise möchten Sie zwei Bereiche vertauschen, die zu einem nicht standardmäßigen tmux-Server gehören, z. B.:

tmux -S other swapp -s 0:1.1 -t 0:0.0

Tmux unterstützt das Austauschen von Fenstern zwischen Servern nicht. Der Sinn von zwei Servern besteht darin, dass sie getrennt sind. Wenn Sie jemals Fenster zwischen zwei halb getrennten Tmux-Einheiten austauschen müssen, sollten diese Einheiten Sitzungen innerhalb eines einzelnen Tmux-Servers sein. Sie können Fenster zwischen verschiedenen Sitzungen austauschen.

Wenn Sie wirklich einen Prozess "kapern" müssen, der unter einem anderen tmux-Server läuft, verwenden SiereptyrDas Tool ist völlig unabhängig von tmux.

verwandte Informationen