Wie kann ich in tmux wie auf dem Bildschirm durch Fenster in einem Fenster blättern?

41

Ich dachte, dass das Verschieben des TMUX-Fensters in das Fenster die gleiche Frage ist, aber es scheint nicht so zu sein.

Da ich GNU screen regelmäßig benutze, suche ich nach tmux, um die gleichen Dinge zu tun. Eines der Dinge, die ich regelmäßig mache, ist, ein paar verschiedene Fenster zu öffnen, eines mit Code, der in vim geöffnet ist, und ein paar Terminalfenster, die geöffnet sind, um den Code zu testen, und manchmal ein oder zwei Fenster für verschiedene andere Dinge. Ich teile den Bildschirm vertikal auf und habe oft das VIM-Fenster im oberen Bereich und dann eines der anderen Fenster im unteren Bereich.

Die Hauptbefehle ich verwende , sind dann Ctrla, Tabzwischen den Scheiben und zu drehen Ctrla, sich nzu drehen zwischen den Fenstern in einem Fensterbereich. Wenn sich beispielsweise vim im oberen Bereich befindet, wechsle ich in den unteren Bereich und drehe mich dann durch die anderen Terminals, wobei ich alles tue, was ich brauche. Der Bildschirm bleibt die ganze Zeit geteilt.

Das Problem ist , ich nicht vergleichbar Fähigkeit Bildschirm finden Ctrla, nin tmux. Das Wechseln zwischen Fenstern scheint in einem Bereich nicht zu funktionieren, springt jedoch vollständig. Wenn der Bildschirm geteilt ist, scheinen die einzigen beiden Optionen zu sein, zu einem Fenster zu springen, das nicht geteilt ist, und es dann zu teilen oder eine Unterteilung eines Fensters durchzuführen. Weder sind, was ich gesucht habe.

Vorschläge (neben dem Festhalten am Bildschirm)?

FooBar
quelle
Ihre Terminologie ist etwas verwirrend. In tmuxeinem Fenster kann in mehrere Bereiche aufgeteilt werden. Versuchen Sie, in einem Fenster mit einer Tastenkombination zwischen den Fenstern zu wechseln?
Jasonwryan
Ich habe versucht, der Nomenklatur der Tools zu folgen, aber ich gebe zu, dass dies verwirrend ist. Ich weiß, wie ich den Fokus von einem Bereich in einen anderen ändern kann. Ich versuche herauszufinden, wie Sie die Anzeige in einem bestimmten Bereich wechseln können, ohne das Layout zu ändern.
FooBar
So verschieben Sie Inhalte von einem Bereich in einen anderen? Suchen Sie swap-pane? Wenn Sie nach Bildschirmemulationen suchen, Ctrl-a nlautet das tmux-Äquivalent Ctrl-b n.
Jasonwryan

Antworten:

28

tmux und screen haben unterschiedliche Modelle, daher gibt es kein genaues Äquivalent.

Im Bildschirm gesehen ein Split können Sie mehrere Fenster gleichzeitig anzuzeigen. next( C-a n) dreht Fenster durch den aktiven Teil der Teilung; Auf diese Weise können Sie "versteckte" Fenster durch den aktiven Bereich der Teilung drehen.

In tmux- Begriffen unterteilt ein Split ein Fenster in einen oder mehrere Bereiche. Jeder Teil eines geteilten Fensters ist ein einzelnes Fenster, Fenster werden niemals ausgeblendet (wenn ein Fenster ausgewählt (sichtbar) ist, werden auch alle Fenster ausgeblendet), und ein Fenster kann nur in einer einzelnen Teilung eines Fensters verwendet werden (ein Fenster kann) nicht in mehreren Fenstern sein, und es kann nicht in mehreren Teilen desselben Fensters sein). Es gibt Befehle zum Verschieben von Fenstern in (oder zwischen) Fenstern, jedoch nicht auf die gleiche Weise wie nextauf dem Bildschirm .


Sie können eine Bindung wie die folgende verwenden, um einen ähnlichen Effekt zu erzielen:

bind-key C-n swap-pane -s :+.top \; rotate-window -Ut :+

Sie werden dies wahrscheinlich in Ihre ~/.tmux.confDatei einfügen wollen , aber Sie können es einfach eingeben / einfügen Prefix :, um es in Ihre aktuelle Serverinstanz zu binden.

Um die Bindung zu verwenden, wählen Sie Ihr „Hauptfenster“ aus, teilen Sie es, erstellen Sie unmittelbar nach dem „Hauptfenster“ ein Fenster mit einem „Fenstercontainer“ und drehen Sie dann mit der Bindung ein beliebiges Fenster im „Hauptfenster“ in der Gruppe „Fenster“. Pane Container “-Fenster.

So können Sie das Setup erstellen:

  • Wählen Sie ein Fenster aus, das Sie als "Hauptfenster" verwenden möchten. Starte (zB) Vim darin.

  • Teilen Sie Ihr „Hauptfenster“ in zwei Bereiche auf.

    ZB Prefix "( :split-window)

    Sie können diesen Bereich als Testfenster (oder Protokollanzeige oder was auch immer) verwenden.

  • Erstellen Sie unmittelbar nach Ihrem Hauptfenster ein neues Fenster (den „Fenstercontainer“).

    ZB Prefix c( :new-window)

    Es ist wichtig, dass kein anderes Fenster zwischen die Indizes des "Hauptfensters" und des "Fenstercontainers" gelangt ( +in den Fensterspezifizierern, die in den gebundenen Befehlen verwendet werden, bedeutet dies "das Fenster mit der nächsthöheren Nummer").

  • Teilen Sie dieses Fenster in mehrere Bereiche auf. Teilen Sie dieses Fenster in zwei Bereiche auf, um drei Bereiche zu durchlaufen (der dritte Bereich befindet sich im „Hauptfenster“).

    Möglicherweise benötigen Sie eine Shell für Git und eine Shell zum Ausführen einer Datenbankschnittstelle. Legen Sie jedes Element in einem separaten Bereich in diesem Fenster "Bereichsbehälter" ab.

  • Wechseln Sie zurück zu Ihrem "Hauptfenster". Wählen Sie den Bereich aus, den Sie „herausdrehen“ möchten.

    Sie können mit Prefix Up/ Down/ Left/ Rightzwischen den Fenstern wechseln.

  • Rufen Sie die Bindung auf, um den aktuellen Bereich mit dem ersten Bereich im Fenster „Bereichsbehälter“ zu tauschen und („hinter den Kulissen“) die Bereiche im Fenster „Bereichsbehälter“ zu drehen (sodass beim nächsten Ausführen der Bindung der erste Befehl ausgeführt wird tauscht mit dem "nächsten" Bereich in der Sequenz).

    Prefix Control- n(für die Bindung verwenden Sie Cn, aber Sie können dies nach Belieben ändern).

  • Um rückwärts durch die Fenster zu scrollen, können Sie Folgendes verwenden:

Bindungsschlüssel Cp Swap-Bereich -s: +. bottom \; Dreh-Fenster -Dt: +
Chris Johnsen
quelle
Danke! Eine großartige Erklärung und Ihre vorgeschlagene Bindung scheinen zumindest die Funktionalität zu reproduzieren, nach der ich gesucht habe.
FooBar
Entschuldigen Sie, wie könnte man eine Scheibe in voller Größe und dann wieder auf die vorherige Anordnung
MageProspero
1
@JamesAndino: tmux 1.8 hat resize-pane -Z(standardmäßig an Präfix + z gebunden), dass ein Fenster vorübergehend so „gezoomt“ wird, dass es die volle Größe des Fensters hat. Für Versionen vor 1.8 gab es keine integrierte Möglichkeit, dies zu tun. Andere haben Skriptlösungen aus anderen integrierten Befehlen erstellt (z. B. einige der Antworten auf die SU-Frage „Maximieren“ eines Bereichs in tmux ).
Chris Johnsen
ty, kompiliert und geladen
MageProspero
3
Ich glaube, C-b oFahrradscheiben.
Sam Selikoff
39

Ich glaube , was Sie suchen ist Ctrlb+ ( , , , ). Mit diesen können Sie zwischen den Fenstern wechseln.

sparticvs
quelle
2
Es tut mir leid, aber ich war nicht sehr klar. Ich habe herausgefunden, wie ich mich von Panel zu Panel bewegen kann. In tmux funktioniert Strg + o ungefähr so ​​wie Strg + a + Tab im Bildschirm. Was ich suche, ist die äquivalente Funktionalität wie die Strg-Taste a + n des Bildschirms.
FooBar
@FooBar wie wäre es Ctrl-b+{oder Ctrl-b+}? Das ist ungefähr so ​​nah wie ich an dieser Funktionalität finden kann. Pane's werden in tmux nicht so gemacht, wie sie auf dem Bildschirm gehandhabt werden.
Sparticvs
Ich habe oft Probleme, den hervorgehobenen Bereich zu fokussieren. Sagen wir, ich habe zwei Bereiche und drücke oft ^b↑. Wie fokussiere ich dann den markierten Bereich tatsächlich so, dass ein anderer von der Shell erfasst wird, nicht von tmux?
ThorSummoner
6

Verwenden bind -rSie, um den Bereich zu finden, indem Sie prefixeinmal und dann nacheinander die anderen Tasten drücken . Das Timeout konnte um eingestellt werden repeat-time. Prüfenman tmux

bind -r Tab select-pane -t :.+

Wenn Sie es vorziehen hjkl,

bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R
Zhazha
quelle
2

Hier ist eine kleine Konf, mit der Sie mit den Tastenkombinationen ALT oder UMSCHALT + Pfeil zu anderen Fenstern oder Fenstern wechseln können. Keine Notwendigkeit, das Schlüsselpräfix zu verwenden, ist bequem.

## NAVIGATION: ############################

# Switch panes 
# Usage: "ALT+arrow keys" (without prefix key)
# from https://gist.github.com/spicycode
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Switch windows 
# usage: "SHIFT+arrow" (without prefix key)
bind -n S-Left  previous-window
bind -n S-Right next-window

Wenn Sie fauler sind als ich, könnte Sie auch der folgende Code interessieren, mit dem Sie mit der Maus durch die Fenster navigieren können. (Verwendung: Tastenpräfix + m zum Einschalten, M zum Ausschalten)

## MOUSE CONTROL: #########################
set -g mode-mouse off
set -g mouse-resize-pane off
set -g mouse-select-pane off
set -g mouse-select-window off

# Toggle mouse on 
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'

# Toggle mouse off
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'

Diese Konfiguration sollte funktionieren. Funktioniert sicher für tmux 1.6 bis 1.9.

xaa
quelle
2

Mit dieser Antwort erhalten Sie zwei Fenster, in denen beide Fenster denselben Satz von Fenstern enthalten, jeder Fensterbereich jedoch unabhängig voneinander zwischen Fenstern wechseln kann.

Der tmux-Ansatz besteht darin, drei Sitzungen zu verwenden:

  • eine äußere Sitzung für die Scheiben ,
  • eine innere Sitzung für die Fenster (Sie können dies von einem Fenster aus anhängen),
  • eine sekundäre Ansicht auf die innere Sitzung (für den anderen Bereich).

Ja, das ist die verrückte UNIX-Philosophie . Lass uns anfangen:

# Create a session to hold the multiple windows
$ tmux new-session -s inner

    <Ctrl-b> c   to create a few windows, run some things

    <Ctrl-b> d   to detach, but leave it running

# Create a session to hold multiple panes (the view)
$ tmux new-session -s outer

    <Ctrl-b> "   to split

# Open the inner session in the current (bottom) pane
$ unset TMUX ; tmux attach -t inner

Jetzt können Sie in den oberen Bereich wechseln und Vim wie gewohnt öffnen. Um in der inneren Sitzung (dem unteren Bereich) durch die Fenster zu blättern, müssen Sie Ctrl-b Ctrl-b nund verwenden p.

Nebenbei: Das ist etwas umständlich, aber Sie können das Präfix der äußeren Sitzung jederzeit ändern, z. B. Ctrl-aso:

<Ctrl-b> :set-option prefix C-a

Dann wäre es einfach Ctrl-b nund pdie inneren Fenster Ctrl-a ozu fahren und die äußeren Scheiben zu fahren.

OK, anstatt Vim im oberen Bereich zu öffnen, stellen wir erneut eine Verbindung zu Ihrer inneren Sitzung her. Beenden Sie vim und verwenden Sie dieses Mal einen new-sessionBefehl (insbesondere mit -tnicht -s):

$ tmux new-session -t inner

Voila! Sie können jetzt sowohl im oberen als auch im unteren Fensterbereich durch die Fenster blättern.

Der Grund, warum wir new-session -tdas zweite Mal verwenden müssen, ist, dass wenn wir es einfach noch attach -teinmal machen würden, der obere und der untere Bereich synchronisiert würden und immer dasselbe Fenster anzeigen würden, was nicht das ist, was Sie wollen. Damit dieser Bereich unabhängig vom anderen Fensterbereich durch Fenster verschoben werden kann, erstellen wir eine neue Ansichtssitzung, verbinden jedoch das Back-End direkt mit der vorhandenen Sitzung, in der sich die Fenster befinden. Dies wird auch als " Gruppensitzung " bezeichnet. (Übrigens schlägt dieser Link auch vor [un]link-window, Fenster zwischen Sitzungen zu verschieben.)

Natürlich hätten Sie aus Symmetriegründen auch tmux new-session -t innerim unteren Fensterbereich ausgeführt werden können attach. In diesem Fall würden Sie 4 Instanzen von tmux ausführen (plus einen weiteren tmux-Prozess für den Server)!

joeytwiddle
quelle
0

Tragen Sie den folgenden Code in Ihren ein .tmux.conf:

# cycle prev/next pane
bind -n S-right select-pane -t :.+
bind -n S-left select-pane -t :.-

Laden Sie die Konfiguration neu, und drücken Sie (direkt ohne Präfixtaste) Shift+, um die Fenster im Uhrzeigersinn und Shift+ in umgekehrter Richtung zu wechseln.

Getestet in Tmux 2.8.


Wenn Sie die Konfiguration nicht bearbeiten möchten, ist prefix+ odie Standardtastenbelegung für den Zyklus im Uhrzeigersinn. Ich habe diese Tastenbindung gelegentlich gefunden, dann habe ich den Befehl von tmux list-keysund verwende ihn für meine eigenen Tastenbindungen:

bind-key    -T prefix       o                 select-pane -t :.+
Reorx
quelle