it-swarm.com.de

Tmux-Bereich in Fenster verschieben

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

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

241
mrlanrat

Der Befehl dazu lautet join-pane in 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.conf dafü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 Bereich aus dem Zielfenster und verbindet ihn mit dem aktuellen, der zweite macht das Gegenteil.

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

$ tmux source-file ~/.tmux.conf
221
jasonwryan

join-Bereich ist die Antwort. Auch ich hatte Probleme mit meinen Versuchen, es basierend auf der tmux-Dokumentation zu verwenden. Ich entdeckte, dass die -t und -s Schalter scheinen zu akzeptieren [session]:window und nicht [session:]window. Das heißt, dass die Angabe der Sitzung optional ist, jedoch das : ist obligatorisch. (Ich benutze tmux 1.5)

Um dem aktuellen Fenster einen Bereich hinzuzufügen und Fenster 1 in den Bereich einzufügen, lautet der Befehl daher (Ctrl+B oder was auch immer Ihr Bindeschlüssel ist, gefolgt von) ...

:join-pane -s :1

Sie können sie dann mit einem Fenster trennen, das standardmäßig wie folgt lautet: Ctrl+B! Wenn Sie es an eine Verknüpfung binden möchten, empfehle ich, 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 der Pausenbereich an gebunden ist ! und @ ist direkt daneben und standardmäßig an nichts gebunden. Aus diesem Grund schlage ich diese Bindung vor ...

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

Alternativ, um eine interaktive Auswahl zu haben ...

bind-key   @ choose-window 'join-pane -h -s "%%"'
bind-key [email protected] choose-window 'join-pane    -s "%%"'

Alternativ können Sie immer dem zuletzt besuchten Fenster beitreten ...

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

Beachten Sie das -h bewirkt, dass die Fenster horizontal gestapelt werden (mit vertikaler Teilung), im Gegensatz zum umgekehrten Standardverhalten.

Das Wichtigste ist, dass Sie LERNEN, was auch immer Sie für eine Verknüpfung auswählen. Denn wenn Sie es nur einstellen und vergessen, werden Sie gimped, 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 nie zurückblicken.

Genießen!

167
Bruno Bronosky

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

break-pane -t :

Ich habe es durch Experimente herausgefunden, aber es scheint sehr gut zu funktionieren. Sie können es einfach mit einem Keybind oder Alias ​​versehen, ohne dass Skripte erforderlich sind.

45
Joshua K

Schlüsselbindung

Standardmäßig, Ctrl+b! würde break den aktiven Bereich in ein neues Fenster verschieben und dorthin wechseln.

Wo Ctrl + b ist die Standardeinstellung Präfix für tmux .

Einzelheiten

Der Befehl tmux, den dieser Schlüssel ausführt, lautet break-pane (Alias: breakp) wie in cmd-break-pane.c und standardmäßig gebunden in key-bindings.c wie in list-keys (Alias: lsk) Befehlsausgabe:

bind-key    -T prefix       !                 break-pane
15
user86041

Wenn Sie die Bereichskennung nicht in eine Eingabeaufforderung eingeben möchten, können Sie diese auch verwenden

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

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

14
Bernhard T

Nachdem ich die anderen Antworten durchgesehen und die tmux-Manpage durchgesehen hatte, entschied ich mich vorerst 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 interaktiv das zu verbindende Fenster auswählen und meine s/v-Bindungen in Kleinbuchstaben spiegeln, um neue vertikale/horizontale Teilungen zu erstellen. Wenn jemand weiß, wie man einzelne Fenster anstelle von Fenstern auswählt, lass es mich wissen.

14
toupeira

Sie müssen Ihre Tastenkombinationen nicht ändern.

Während der Bereich, den Sie verschieben möchten, den Fokus hat, geben Sie Präfix und dann :join-pane -t :1 Ein, wobei 1 Die Nummer des Zielfensters in derselben Sitzung ist. Sie können es in eine andere Sitzung verschieben, indem Sie den Namen wie project:3 Vorstellen. Für mich join-pane Tab-Autocompletes von j.

Fügen Sie dem Befehl einen Schalter -h Oder -v Hinzu, um die Ausrichtung des neuen Ziels festzulegen, der im Ziel erstellt wurde, oder gehen Sie einfach zu ihm und Präfixspace neu anordnen.

4
Walf