Tmux windows neu ordnen


21

Wie kann ich Windows in tmux effizient neu anordnen? Zum Beispiel mit dieser Reihe von Fenstern:

0:zsh  1:elinks  2:mutt  3:irssi  4:emacs  5:rss  6:htop

Was würde ich zu bewegen tun müssen, um rsszwischen elinksund mutt, endet mit:

0:zsh  1:elinks  2:rss  3:mutt  4:irssi  5:emacs  6:htop

Ich weiß, wie man move-windowein Fenster in einen noch nicht verwendeten Index verschiebt, und ich könnte eine Reihe von Fenstern verwenden, um dies zu erreichen - aber das ist natürlich sehr mühsam.


1
Diese SU Q & A zeigt , was Sie fragen nach: superuser.com/questions/343572/how-do-i-reorder-tmux-windows
slm

Antworten:


38

swap-window kann dir helfen:

swap-window -t -1

Das aktuelle Fenster wird um eine Position nach links verschoben.

Vom Mann tmux :

swap-window [-d] [-s src-window] [-t dst-window]
             (alias: swapw)
This is similar to link-window, except the source and destination windows are swapped. 
It is an error if no window exists at src-window.

Sie können es an einen Schlüssel binden:

bind-key -n S-Left swap-window -t -1
bind-key -n S-Right swap-window -t +1

Dann können Sie mit Shift+Leftund Shift+Rightdie aktuelle Fensterposition ändern.


Aber ich müsste immer noch eine Reihe von swap-windowBefehlen ausführen (drei für den Beispielfall) - richtig?
igor

@igor: Ja. Ein anderer Weg, den Sie tun können swap-window -s 2 -t 5. Diese Swap-Fenster Nummer 2 mit Fensternummer 5.
Cuonglm

Richtig - aber ich möchte die Reihenfolge aller anderen Fenster beibehalten, so dass ein "einfaches" Austauschen der Fenster 2 und 5 für mich nichts bringt. Der swap-windowBefehl war mir bereits bekannt , aber ich wusste nichts über die -/ +-Präfixe für das vorherige / nächste Fenster.
igor

Unter unix.stackexchange.com/a/525770/12497 finden Sie Informationen zum geänderten Verhalten swap-windowin neueren tmux-Versionen
Steven Lu,

2

Die akzeptierte und hoch gelobte Antwort ist korrekt, obwohl das Verhalten in den letzten tmux-Versionen den Befehl swap-window nicht dazu führt, dass Sie im selben Fenster bleiben. Es funktioniert also ziemlich unintuitiv, Ihr aktives Fenster wird in diese Richtung getauscht, aber Sie bleiben im selben Slot!

Um dieses Problem zu beheben, erweitern Sie einfach die Bindung, um dem Problem zu folgen. Zum Beispiel aus meiner tmux Konfiguration:

bind -n C-S-Left { swap-window -t -1; previous-window }
bind -n C-S-Right { swap-window -t +1; next-window }

1

Hier ist eine funktionierende Lösung mit Bash-Funktion.

list=$(tmux lsw -F '#I');                           # for shift left, could be moved inside function
list=$(tmux lsw -F '#I'); list=$(echo $list|rev);   # for shift right, list reversed
shift_tmux_window_range() {  # depend on `list`
    local started=0 beg=$1 end=$2
    for i in $list; do
        if (($i == $beg)); then
            started=1; h=$beg; tmux linkw -s $beg && tmux unlinkw -t $beg;
        elif (($i == $end)); then
            tmux movew -d -s $i -t $h; tmux movew -d -t $end; break;
        elif [ $started = 1 ]; then
            tmux movew -d -s $i -t $h; h=$i;
        fi;
    done
}

shift_tmux_window_range 5 2

Bonus: Bleiben Sie im selben Fenster, wenn das derzeit aktive Fenster nicht betroffen ist.


Brillant! Vielen Dank.
Alexander Bird

-1

If tmuxist Version 1.7 oder höher

move-window -r

oder

set-option -g renumber-windows on

in .tmux.confautomatisch tun, in Zukunft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.