In screen
kann ich einfach eingeben C-a :number 0
, um ein Fenster an den Anfang der Fensterliste zu verschieben und alle anderen Fenster nach unten zu schieben. Wozu dient die entsprechende Befehlssequenz tmux
? Ich habe mir die Manpage angesehen, finde sie aber in diesem Punkt verwirrend.
413
C-b
,.
können Sie ein Fenster neu nummerieren.swap-window -s number
undswap-window -t number
zum Tauschen des aktuellen Fensters siehe meine Antwort hier .Antworten:
Der
swap-window
Befehl ist dem am nächsten, was Sie wollen.„Prefix“ (dh Ctrl+ B, in :der Standardeinstellung) bringt Dich zur tmux-Eingabeaufforderung. Dort geben Sie ein:
Fenster Nummer 3 und Fenster Nummer 1 tauschen ihre Positionen.
So tauschen Sie das aktuelle Fenster mit dem oberen Fenster aus:
In dem unwahrscheinlichen Fall, dass bei Index 0 kein Fenster vorhanden ist, tun Sie Folgendes:
(Wenn der Basisindex standardmäßig 0 ist).
Sie können diesen Befehl an eine Taste binden (z. B. T für "top"), indem Sie Folgendes zu Ihrer hinzufügen
~/.tmux.conf
:quelle
move-window
funktioniert aber nur, wenn sich kein weiteres Fenster am angegebenen Index befindet. Also in den meisten Fällenmove-window -t 0
nicht funktionieren, da in der Regel bereits ein anderes Fenster an dieser Position vorhanden ist.movew
.bind-key L swap-window -t -1
um es zum letzten Fenster zu machen.swapw -s number
undswapw -t number
zum Tauschen des aktuellen Fensters siehe meine Antwort hier .Zur Antwort von Gareth können Sie die folgenden Tastenkombinationen verwenden
Drücken Sie Strg + Umschalt + Nach links (verschiebt das aktuelle Fenster nach links. Ebenso nach rechts. Sie müssen den Modifikator (Cb) nicht verwenden.
quelle
-1
und die+1
Syntax helfen, das Problem der belegten Indizes zu lösen. tmux verschiebt die anderen Fenster für Sie und führt den Ereignisumbruch automatisch zum Ende / Anfang. Das ist die beste Antwort.bind-key S-Left swap-window -t -1
, also kann ich <Präfix> Umschalt + Pfeil ausführen, da ich es nicht mag, Tastenzuordnungen für Programme durcheinander zu bringen.bind-key -n C-H swap-window -t -1
bind-key -n C-S-Left swap-window -t -1
aber es funktioniert einwandfrei, wenn ich das von @MatthewMitchellDas tmux-Äquivalent zu
:number 42
ist:move-window -t 42
.quelle
:move-window
ist nicht gleichbedeutend mit screen's:number
.:number
swaps, wenn das Ziel existiert,:move-window
schlägt in diesem Fall fehl. Sie müssen wählen zwischen:move-window
und:swap-window
Ich nummeriere Fenster wie folgt neu:
Ctrl+ b,
.
,222
würde das aktuelle
tmux
Fenster (alle Fenster) mit der Nummer 222 versehen.Verwandte: Wenn ich Dinge durcheinander bringe, tendiere ich dazu, dies zu tun
Ctrl+b
:new-session -d -s "reading"
und von dort kann ich auch Ctrl+ b,, verwenden
.
,reading
um das aktuelle Fenster (alle Fenster auf einmal) in die Lesesitzung zu verschieben. Sie können zwischen Sitzungen mit blättern Ctrl+ b,s
wie Sie innerhalb der Session mit blättern würden Ctrl+ b,w
.HTH
quelle
Sie können einen äquivalenten Befehl zu
screen
'snumber
mithilfe eines externen Shell-Skripts implementieren , das zwischenswap-window
und auswähltmove-window
. Sie können es auf diese Weise an einen Schlüssel binden:~/.tmux.number.sh
:quelle
-F
Option entfernt, die von meiner tmux-Version nicht akzeptiert wird.Verwenden des Swap-Fensters, um zu einer ID zu gelangen: [am nächsten an screen's: number]
[m für move -> drücke prefix-m und gib say 3 ein. .Um das Fenster zu 3 neu zu nummerieren]
quelle
Da Ashish Arigas Antwort bei Version 1.9a und niedriger nicht funktioniert. Ich benutze
<
und>
, um das Fenster nach links bzw. rechts zu tauschen, indem ich die Zeile darunter zu hinzufüge.tmux.conf
.quelle
Die einfachste Lösung
man
besteht darin, die Standardbindungen zu verwenden:quelle
Für diejenigen von Ihnen, die
byobu
als Wrapper für tmux verwenden, können Sie das aktuelle Fenster mit dem vorherigen oder nächsten Fenster tauschen:Die
byobu
für diese Schlüssel definierte Schlüsselbindung kann von Interesse sein:quelle
Der Ansatz, den ich benutze, kombiniert ein bisschen Ashishs Antwort mit der von piec; Ich habe einen Alt-Links- und Rechtspfeil, der an einen kurzen kleinen Shell-Callout gebunden ist, der das Fenster um eins nach links oder rechts verschiebt, es sei denn, es ist das erste oder letzte Fenster, respektvoll. Ich habe dies getan, weil, wenn Sie im letzten Fenster einen Swap +1 ausgeben (oder im ersten Fenster einen Swap -1), der Swap immer noch ausgeführt wird, anstatt wie erwartet wieder zurück zu laufen:
Wird
Anstatt von
Die Befehle, die ich verwende, funktionieren also nicht mehr, wenn das Fenster den Rand der Liste erreicht hat:
Dies kann leicht mit Basisindex- und Umnummerierungsfenstern kombiniert werden , um eine Liste von Fenstern zu erhalten, die bei einer beliebigen Zahl beginnen und keine Lücken aufweisen.
Wenn Sie wie ich den Basisindex 1 verwenden und nicht glauben, dass Sie jemals über 999 Fenster hinausgehen werden, können Sie einen kleinen Trick anwenden, um ihn richtig rollen zu lassen, obwohl die Befehle ein wenig aufblähen:
Dies funktioniert, indem das letzte Fenster vorübergehend auf den nicht verwendeten Index-0 verschoben wird und anschließend move-window -r aufgerufen wird , um sie ab 1 erneut zu nummerieren. Ähnlich funktioniert es, wenn Sie das erste Fenster ans Ende verschieben. Durch die Auswahl einer riesigen Zahl, die Sie niemals verwenden werden, wird sichergestellt, dass beim erneuten Auslösen von move-window -r alles wie erwartet nummeriert wird. Wenn Sie sich über refresh-client -S wundern , ist dies erforderlich, da die Statusleiste manchmal erst aktualisiert wird, wenn weitere Änderungen vorgenommen wurden , während das Umordnen aus dem Verschiebefenster ordnungsgemäß funktioniert. Indem Sie nur die Statusleiste (-S) aktualisieren, vermeiden Sie dies.
Das einzige Problem, das ich bei diesem Ansatz feststellen kann, ist, dass das Swap-Fenster implizit das zuletzt verwendete Fenster in das Fenster ändert, mit dem Sie getauscht haben. Wenn Sie sich also in Fenster Nr. 1 befinden, zu Fenster Nr. 4 wechseln und es um eins zurückschieben, werden Sie feststellen, dass Ihr zuletzt verwendetes Fenster das neue Nr. 4 (früher Nr. 3) anstelle von Nr. 1 ist. Daran scheint es keinen Weg zu geben.
quelle
Mit können Sie
base-index
die Startnummer für Ihre Fenster ändern. wenn Sie setzenbase-index
auf1
, dannmove-window -r
wird neu nummeriert alle Fenster zu starten1
, damit die Freisetzung ,0
um ein Fenster in den entsprechenden Steckplatz zu verschieben:Wenn Sie fertig sind, können Sie auf zurücksetzen
base-index
,0
wenn Sie später verwenden möchten,move-window -r
ohne Ihr Fenster um zu verschieben0
quelle
tmux-Schmerz-Kontrolle bietet
ctrl-b >
undctrl-b <
das fokussierte Fenster rechts und links zu bewegen, Umwickeln.quelle
Beides
swap-window -s 5
undswap-window -t 5
aktuelles Fenster mit Fenster 5 tauschen, jedoch mit unterschiedlicher Semantik.swap-window -s 5
swap-window -t 5
das
number
inswap-window -s number
und-t number
könnte sowohl absolut , zB 5, als auch relativ , zB -1, +2 sein.PS unten ist ein Auszug aus der TMUX-Statuszeile, die den Effekt von veranschaulicht
swap-window -s 5
kürzlich:
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
jetzt nach
last-window
:[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
nachher
swapw -s 5
:[0] 0:mc* 1:mpl 2:py2- 3:numpy 4:plot 5:vim
eine andere
swapw -s 5
:[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
eine andere
last-window
:[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
quelle
Versuchen Sie im tmux-Fenster Folgendes, um Fenster 0 gegen 1 auszutauschen:
$ tmux swap-window -d -s 0 -t 1
quelle
Ich denke, Sie möchten eine neue Tastenkombination an den Befehl "Fenster auswählen" binden.
Ich weiß, Sie sagten, Sie hätten die Manpage bereits gelesen, aber Sie sollten darauf zurückgreifen. Sie müssen Ihre ~ / .tmux.conf-Datei ändern, um einen Bind-Key-Befehl hinzuzufügen.
Schauen Sie sich insbesondere Seite 4 des Folgenden an.
tmux man page
quelle
choose-window
scheint das aktuelle Fenster nicht an eine neue Position zu verschieben.choose-window
ist schon gebundenC-B w
.Dies ist die Methode, die ich benutze. Sie können ein Fenster immer noch nicht in einen belegten Index verschieben, aber Sie können ein Fenster in einen höheren (nicht verwendeten) Index verschieben und in der Lücke neu anordnen, in der sich der vorherige Index befand.
Angenommen, Sie haben 3 Fenster und möchten ein viertes hinzufügen, aber an der Stelle, an der 3 zuvor war.
Bevor Sie ein neues Fenster hinzufügen: Tmux-Präfix dann. öffnet den Bewegungsbefehl. Geben Sie 4 ein und der Index von 3 wird nun zu 4, fügen Sie einfach ein weiteres Fenster hinzu und es befindet sich bei Index 3 und Ihr altes Fenster befindet sich weiterhin bei Index 4.
quelle
Öffnen Sie zuerst den Befehl tmux press and release:
Und um das aktuelle Fenster in das rechte Fenster (in kreisförmiger Reihenfolge) zu ändern, gehen Sie wie folgt vor:
So ändern Sie das aktuelle Fenster nach links:
SHIFT
wenn Sie}
oder drücken{
.quelle
Für was es wert ist:
Ich habe dieses Skript zusammen gehackt, um alle Fenster in einer "TUI" anordnen zu können. Es listet alle Ihre Fenster in einer temporären Datei auf und öffnet sie mit Ihrem Standardeditor (setzt voraus, dass Sie $ EDITOR eingestellt haben). Danach können Sie die Zeilen neu anordnen, und nachdem Sie die Datei gespeichert und geschlossen haben, werden die Fenster entsprechend neu angeordnet. (Dies ist ähnlich wie bei der Bestellung von Commits
git rebase -i
)Es könnte wahrscheinlich eine Menge verbessert werden, insbesondere:
HINWEIS : Möglicherweise werden Sie nach dem Ausführen des Befehls in ein anderes Fenster verschoben.
Ein GIF davon in Aktion (Github)
quelle
Keine der Antworten hier hat mich befriedigt, deshalb habe ich ein Skript geschrieben, das das
screen
Verhalten beim Verschieben von Fenstern nachahmttmux
.Es erkennt, ob die Zielfensternummer kleiner als die kleinste Fensternummer oder größer als die größte Fensternummer ist. Wenn dies der Fall ist, werden alle anderen Fenster nach rechts oder links verschoben und schrittweise von 1-N neu nummeriert . Dies geschieht mit dem
move-window
Befehl.Wenn die Fensternummer zwischen den kleinsten und größten Nummern liegt (dh vermutlich mit einer vorhandenen Fensternummer übereinstimmt), werden sie einfach mit dem
swap-window
Befehl ausgetauscht .Hier ist das Skript:
Dann fügen Sie einfach diese einfache Schlüsselbindung zu Ihrem hinzu
.tmux.conf
:Hinweis : Um das Tauschverhalten von
screen
Fenstern perfekt nachzubilden, sollte ein Fenster, wenn Sie es auf eine vorhandene Fensternummer verschieben, den Platz dieses Fensters einnehmen und alle anderen Fenster werden nach rechts verschoben . Es wäre ziemlich einfach, dieses Skript zu ändern, um dies zu tun.quelle
Keine Notwendigkeit für die Kommandozeile (das ist Ctrl+ bund dann :)
Bewegen Sie einfach Ihre Fenster mit
Ctrl+ b+:
Geben Sie dann die neue (freie) Fensternummer ein und drücken Sie Enter
Wenn jetzt eine freie Fensternummer vorhanden ist, verwenden Sie Ctrl+ b+ ., um ein Fenster neu zu nummerieren.
(Tipp: Benennen Sie Ihre Fenster mit Ctrl+ b+, ,wenn Sie den Überblick darüber verlieren, welches Fenster welches ist)
quelle