Verschieben des TMUX-Fensters in das Fenster

228

Wie verschiebe ich ein vorhandenes Fenster in ein anderes Fenster in tmux, wenn ich mehrere Fenster habe und umgekehrt?

Ich komme vom Bildschirm , wo ich zum Fenster wechseln und dann das Fenster wechseln kann, bis ich zu dem gewünschten komme. tmux scheint dies nicht zuzulassen.

mrlanrat
quelle

Antworten:

209

Der Befehl dazu ist join-panein tmux 1.4.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Like split-window, but instead of splitting dst-pane and creating
    a new pane, split it and move src-pane into the space.  This can
    be used to reverse break-pane.

Um dies zu vereinfachen, habe ich diese Bindungen in meinem .tmux.confdafür:

# pane movement
bind-key j command-prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:"  "join-pane -t '%%'"

Der erste greift nach dem Fenster des Ziels und verbindet es mit dem aktuellen Fenster. Der zweite greift in umgekehrter Reihenfolge.

Anschließend können Sie Ihre tmux-Sitzung neu laden, indem Sie in der Sitzung Folgendes ausführen:

$ tmux source-file ~/.tmux.conf
jasonwryan
quelle
Ich versuche diese Methode, aber wenn ich Ihren Code in meine .tmux.conf-Datei lege und Strg-b, j drücke, scheint nichts zu passieren.
Mrlanrat
2
Sie müssen mindestens 2 Fenster mit jeweils ein paar Fenstern öffnen: Prefix+s
Drücken Sie
Ich habe immer noch kein Glück damit, nichts passiert. Ich habe das Gefühl, dass tmux die .tmux.conf-Datei nicht liest, weil sie überhaupt nicht auf Ctrl-b, j oder Ctrl-b, s reagiert. (Dies sind die einzigen 2 Zeilen in der Konfigurationsdatei)
Mrlanrat
7
@mrlanrat Ich finde, dass Sie der Fensternummer einen Doppelpunkt voranstellen müssen. Siehe meine Antwort unten.
Bruno Bronosky
1
Worauf bezieht sich das '%%'?
Oligofren
152

Join-Bereich ist die Antwort. Ich hatte auch Probleme mit meinen Versuchen, es basierend auf der tmux-Dokumentation zu benutzen. Ich habe festgestellt, dass die Schalter -t und -s anscheinend das Fenster [session]: und nicht das Fenster [session:] akzeptieren. Das heißt, die Angabe der Sitzung ist optional, die Angabe des: ist jedoch obligatorisch. (Ich benutze tmux 1.5)

Um dem aktuellen Fenster ein Fenster hinzuzufügen und Fenster 1 in das Fenster einzufügen, lautet der Befehl daher (Strg-B oder was auch immer Ihre Bindetaste ist, gefolgt von) ...

:join-pane -s :1

Sie können sie dann mit dem Trennfenster teilen, das standardmäßig lautet: Strg-B! Wenn Sie es an eine Verknüpfung binden möchten, schlage ich vor, eine Standardbindung wie s NICHT zu überschreiben, da Sie später im Internet nach einer Antwort suchen, die eine Auswahlsitzung beinhaltet und auf Ihrem System nicht funktioniert. Beachten Sie, dass die Trennscheibe gebunden ist an! und @ ist direkt daneben und standardmäßig an nichts gebunden. Aus diesem Grund empfehle ich diese Bindung ...

bind-key @ command-prompt -p "create pane from:"  "join-pane -s ':%%'"

Alternativ können Sie eine interaktive Auswahl treffen ...

bind-key @ choose-window 'join-pane -h -s "%%"'

Alternativ können Sie sich immer dem zuletzt besuchten Fenster anschließen ...

bind-key @ join-pane -h -s !

HINWEIS: Dies -hbewirkt, dass die Fenster horizontal gestapelt werden (mit vertikaler Aufteilung), im Gegensatz zum umgekehrten Standardverhalten.

Das Wichtigste ist, dass Sie LERNEN, was immer Sie sich für eine Verknüpfung entscheiden. Denn wenn Sie es nur setzen und vergessen, werden Sie bestürzt, wenn Sie sich auf einem fremden Server befinden. Und seien wir ehrlich: Das Wichtigste, was ein Terminal-Multiplexer Ihnen bietet, sind zuverlässige Sitzungen auf Remote-Servern.

Damit ist meine Konvertierung von GNU Screen zu Tmux abgeschlossen. Ich werde niemals zurückblicken.

Genießen!

Bruno Bronosky
quelle
2
Ich hatte auch das ':' verpasst ... danke dafür.
rascalking
Ich habe in letzter Zeit zwei Ablehnungen erhalten, ohne dass ich begründen könnte, warum. Das ist einfach unhöflich und Anti-FOSS-Kultur.
Bruno Bronosky
1
Dokumentation spricht überhaupt nicht über Doppelpunkte! Schön
JonnyRaa
1
Die Verwendung der Punktsyntax hat mir window.panebeispielsweise geholfen join-pane -s 1.0, Fenster 0 in Fenster 1 in das aktuelle Fenster zu verschieben. Weitere Informationen unter maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras
Ab tmux 2.1 wird das :anscheinend nicht mehr benötigt (zB einfach machen :join-pane -s 1). Vielleicht war das ein Fehler in früheren Versionen
villapx
38

Ich denke, ich mag es besser, was ich verwendet habe, um Scheiben an ihr eigenes Fenster zu bewegen. ich benutze

break-pane -t :

Ich habe es durch Experimente herausgefunden, aber es scheint sehr gut zu funktionieren. Sie können es einfach per Keybind oder Alias ​​verknüpfen, ohne dass ein Skript erforderlich ist.

Joshua K
quelle
2
+1. Ich benutze das viel öfter als join-pane.
Chris B
14

Wenn Sie die Fenster-ID nicht in eine Eingabeaufforderung eingeben möchten, können Sie auch verwenden

bind-key j "join-pane -s !"

Dadurch wird der letzte aktive Bereich / das letzte aktive Fenster mit dem aktuellen Fenster verbunden.

Bernhard T
quelle
1
Welche Version verwenden Sie? Ich komme unknown command: join-pane -s !mit 1.6 zurecht.
Paradroid
Wenn Sie hier 2.0 verwenden, aber nur die Zeile ohne Anführungszeichen in die conf einfügen, funktioniert dies problemlos. bind-key j join-pane -s !
bkzland
13

Nachdem ich die anderen Antworten durchgesehen und die tmux-Manpage durchgesehen hatte, entschied ich mich für die folgenden Bindungen:

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

Auf diese Weise können Sie das zu verbindende Fenster interaktiv auswählen und meine Kleinbuchstaben s/ vBindungen spiegeln , um neue vertikale / horizontale Teilungen zu erstellen. Wenn jemand weiß, wie man einzelne Fenster anstelle von Fenstern auswählt, lass es mich wissen.

toupeira
quelle
Das ist sehr hilfreich. Danke. Leider erzeugen die -vund -hkeine vertikalen bzw. horizontalen "Splits". Sie erzeugen vertikale und horizontale " gestapelte Scheiben ". (Das heißt, dass vertikal gestapelte Scheiben horizontal geteilt sind.) Sie müssen also Ihr Gehirn auf diese Weise trainieren. Auch -vist die Standardeinstellung, also würde ich das weglassen und es nur einfügen, -hdamit Sie es ~/.tmux.confals Spickzettel ansehen können.
Bruno Bronosky
Das gefällt mir besser als die anderen Antworten für "Gegenteil von break-pane". Nachdem ich eine Scheibe vorübergehend in ein eigenes Fenster freigelegt habe, möchte ich sie später an eines der älteren Fenster zurücksenden, und dies erledigt dies ordnungsgemäß.
Stabledog
13

Schlüsselbindung

In der Standardeinstellung Ctrl+ b, !würde bricht die aktive Scheibe in ein neues Fenster und wieder aufgerufen werden .

Wo Ctrl+ bist der Standard - Präfix für .

Einzelheiten

Der tmuxBefehl, den dieser Schlüssel ausführt, ist break-pane(alias :) wie in key-bindings.cbreakp implementiert cmd-break-pane.cund standardmäßig gebunden, wie in der Befehlsausgabe (alias :) zu sehen :list-keyslsk

bind-key    -T prefix       !                 break-pane
muru
quelle
4

Sie müssen Ihre Tastenkombinationen nicht ändern.

Während der Bereich, den Sie verschieben möchten, den Fokus hat, geben Sie Prefix ein, und geben Sie an, :join-pane -t :1wo 1sich die Nummer des Zielfensters in derselben Sitzung befindet. Sie können es in eine andere Sitzung verschieben, indem Sie dessen Namen voranstellen project:3. Für mich join-panetab-autocompletes aus j.

Fügen Sie dem Befehl ein -hoder einen -vSchalter hinzu, um die Ausrichtung des im Ziel erstellten neuen Splits festzulegen, oder navigieren Sie einfach zu diesem Befehl und wählen Sie Präfix +, spaceum die Reihenfolge zu ändern.

Walf
quelle