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-pane
dem Befehl tmux austauschen. Von man 1 tmux
:
swap-pane [-dDU] [-s src-pane] [-t dst-pane]
(alias:swapp
)Zwei Bereiche vertauschen. […]
-d
weist tmux an, den aktiven Bereich nicht zu ändern.Wenn
-s
weggelassen wird und ein markierter Bereich vorhanden ist (sieheselect-pane -m
), wird der markierte Bereich statt des aktuellen Bereichs verwendet.
Es ist sogar noch besser: Wenn -s
und -t
beide 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 swapp
wird 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 && exit
wenn kein markierter Bereich vorhanden ist (oder wenn der aktuelle markiert ist) . In diesem Fall wird einfach die Shell beendet.tmux swapp
tmux 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 teilendst-pane
und einen neuen Bereich zu erstellen, teilen Sie es und verschieben Sie essrc-pane
in den Raum. […]Wenn
-s
weggelassen wird und ein markierter Bereich vorhanden ist (siehe select-pane-m
), wird der markierte Bereich statt des aktuellen Bereichs verwendet.
Also statt prefix ":
- Markieren Sie den Bereich, den Sie verschieben möchten.
Teilen Sie den Bereich, den Sie teilen möchten:
- entweder mit
tmux joinp -v
dort 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).
- entweder mit
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 swapp
aber Sie können es tmux joinp
auf ähnliche Weise aufrufen.
swap-pane
ermöglicht den Austauschbeliebigzwei Fenster innerhalb eines tmux-Servers. Sie können tmux swapp
sogar 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.pane
Teil, ich bin mir bei der session
Zahl nicht sicher). Der allererste Bereich 0:0.0
nach dem Austausch mit 0:1.1
wird 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 %0
bei war 0:0.0
und der neue %2
bei war 0:1.1
, sie nun %0
bei 0:1.1
bzw. %2
bei 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-session
Sie 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 ( -L
Option) oder Socket-Namen ( -S
) identifiziert. Der Standardname ist default
. Wenn Sie tmux
tmux ohne diese Optionen aufrufen, wird der richtige Server gefunden (über die TMUX
Umgebungsvariable, glaube ich). Wenn Sie tmux
tmux 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 Siereptyr
Das Tool ist völlig unabhängig von tmux.