W screen
, mogę po prostu wpisać, C-a :number 0
aby przenieść okno na górę listy okien i przesunąć wszystkie pozostałe okna w dół o jedno. Jaka jest równoważna sekwencja poleceń tmux
? Spojrzałem na stronę podręcznika, ale w tej kwestii jest to mylące.
413
C-b
,.
pozwala przenumerować okno.swap-window -s number
iswap-window -t number
zamienić bieżące okno, zobacz moją odpowiedź tutaj .Odpowiedzi:
swap-window
Komenda jest najbliżej, co chcesz.„Prefiks” (czyli Ctrl+ B, :domyślnie) powoduje przejście do wiersza tmux-komend. Tam wpisujesz:
aby okno nr 3 i okno nr 1 zamieniły się miejscami.
Aby zamienić bieżące okno z górnym oknem, wykonaj:
W mało prawdopodobnym przypadku braku okna o indeksie 0 wykonaj:
(jeśli indeks podstawowy wynosi 0, tak jak jest domyślnie).
Możesz powiązać to polecenie z klawiszem (na przykład T dla „góry”), dodając następujące polecenie do
~/.tmux.conf
:źródło
move-window
działa tylko, jeśli pod danym indeksem nie ma innego okna. Więc w większości przypadkówmove-window -t 0
nie będzie działać, ponieważ zwykle w tej pozycji będzie już inne okno.movew
.bind-key L swap-window -t -1
aby było to ostatnie okno.swapw -s number
iswapw -t number
zamienić bieżące okno, zobacz moją odpowiedź tutaj .Dodając do odpowiedzi Garetha, możesz użyć następujących powiązań klawiszy
Naciśnięcie Ctrl + Shift + Lewo (przesunie bieżące okno w lewo. Podobnie w prawo. Nie trzeba używać modyfikatora (Cb).
źródło
-1
i+1
składnia pomaga rozwiązać problem zajętych wskaźników. tmux przesunie za ciebie inne okna i automatycznie zawinie do końca / początku. To najlepsza odpowiedź.bind-key S-Left swap-window -t -1
, więc mogę zrobić <prefix> Shift + strzałka, ponieważ nie lubię popsuć powiązań klawiszy dla programów.bind-key -n C-H swap-window -t -1
bind-key -n C-S-Left swap-window -t -1
ale działa dobrze, gdy używa się prefiksu sugerowanego przez @MatthewMitchellOdpowiednikiem tmux
:number 42
jest:move-window -t 42
.źródło
:move-window
jest równoważne z screenem . zamienia, jeśli miejsce docelowe istnieje, w takim przypadku kończy się niepowodzeniem. Musisz wybrać pomiędzy i:number
:number
:move-window
:move-window
:swap-window
Ponownie numeruję okna w następujący sposób:
Ctrl+ b,
.
,222
zmieniłoby bieżące
tmux
okno (wszystkie panele) na numer 222.Powiązane: Kiedy tasuję różne rzeczy, zwykle chcę to robić
Ctrl+b
:new-session -d -s "reading"
a stamtąd można również użyć Ctrl+ b,
.
,reading
aby przesunąć bieżące okno (wszystkie szyby na raz) nad sesją czytania. Można przeglądać wśród sesje z Ctrl+ b,s
tak byś przeglądania ciągu sesji za pomocą Ctrl+ b,w
.HTH
źródło
Można wdrożyć odpowiednik
screen
„snumber
polecenie za pomocą zewnętrznego skrypt, który wybiera pomiędzyswap-window
imove-window
. W ten sposób możesz powiązać go z kluczem:~/.tmux.number.sh
:źródło
-F
opcję, która nie jest akceptowana przez moją wersję tmux.Korzystanie z okna zamiany, aby przejść do dowolnego identyfikatora: [najbliższy screenowi: liczba]
[m dla ruchu -> naciśnij prefiks-m i wpisz powiedz 3. .do zmiany numeracji okna na 3]
źródło
Ponieważ odpowiedź Ashish Ariga nie działa w wersji 1.9a i niższych. Używam
<
i>
do zamiany okna odpowiednio na lewą i prawą, dodając wiersz poniżej do.tmux.conf
.źródło
Najprostszym rozwiązaniem
man
jest użycie domyślnych powiązań:źródło
Dla tych, którzy używają
byobu
jako opakowania dla tmux, możesz zamienić bieżące okno na poprzednie lub następne okno za pomocą:Powiązanie klawiszy zdefiniowane
byobu
dla tych kluczy może być interesujące:źródło
Podejście, które stosuję łączy w sobie trochę odpowiedzi Ashisha z piecem; Mam lewą i prawą strzałkę związaną z krótkim objaśnieniem powłoki, która przesuwa okno jedno w lewo lub w prawo, chyba że jest to pierwsze lub ostatnie okno, z szacunkiem. Zrobiłem to, ponieważ kiedy wystawisz swap +1 w ostatnim oknie (lub swap -1 w pierwszym oknie), nadal będzie zamieniał, zamiast zapętlać się ponownie, jak możesz się spodziewać:
Staje się
Zamiast
Tak więc polecenia, których używam, przestają działać, gdy okno osiągnie krawędź listy:
Można to łatwo połączyć z indeksem bazowym i numeracją okien w celu uzyskania listy okien, które zaczynają się od dowolnej liczby i nigdy nie mają żadnych przerw.
Jeśli używasz indeksu bazowego 1 takiego jak ja i nie sądzisz, że kiedykolwiek przekroczysz 999 okien, możesz zastosować małą sztuczkę, aby poprawnie się toczyć, choć polecenia nieco się rozluźniają:
Działa to poprzez tymczasowe przeniesienie ostatniego okna do nieużywanego indeksu-0, a następnie wywołanie move-window -r w celu zmiany numeracji, zaczynając od 1. Działa podobnie podczas przesuwania pierwszego okna do końca; wybierając ogromną liczbę, której nigdy nie użyjesz, zapewnia to, że gdy ponownie przesunie się okno -r, wszystko będzie ponumerowane tak, jak można się spodziewać. Jeśli zastanawiasz się nad odświeżeniem klienta-S , jest to konieczne, ponieważ czasami, chociaż zmiana kolejności z okna przenoszenia będzie działać poprawnie, pasek stanu nie zostanie zaktualizowany, dopóki nie zostaną wprowadzone dalsze zmiany. Wymuszając odświeżenie tylko paska stanu (-S), unikniesz tego.
Jedynym problemem, jaki mogę znaleźć w tym podejściu, jest to, że okno zamiany domyślnie zmieni ostatnio używane okno na to, z którym zamieniłeś się. Tak więc, jeśli jesteś w oknie nr 1, przełącz się na okno czwarte i cofnij je o jedno, a zobaczysz, że ostatnio używane okno to nowe nr 4 (dawniej nr 3) zamiast nr 1. Wydaje się, że nie ma sposobu na obejście tego.
źródło
możesz użyć,
base-index
aby zmienić numer początkowy dla swoich okien. jeśli ustawiszbase-index
na1
, wówczasmove-window -r
przenumeruje wszystkie okna zaczynając od1
, zwalniając w ten sposób,0
aby przenieść okno do jego gniazda:gdy skończysz, możesz zresetować
base-index
do,0
jeśli chcesz użyćmove-window -r
później bez przesuwania okna o0
źródło
tmux-pain-control zapewnia
ctrl-b >
ictrl-b <
przesuwa skoncentrowane okno w prawo i lewo, owijając się wokół.źródło
Zarówno
swap-window -s 5
iswap-window -t 5
zamień bieżące okno z oknem 5, ale z inną semantyką.swap-window -s 5
swap-window -t 5
number
sięswap-window -s number
i-t number
może być zarówno bezwzględne , na przykład, 5 i względem , na przykład, 1, +2.PS poniżej to fragment linii statusu tmux ilustrujący działanie
swap-window -s 5
niedawny:
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
teraz po
last-window
:[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
po
swapw -s 5
:[0] 0:mc* 1:mpl 2:py2- 3:numpy 4:plot 5:vim
inny
swapw -s 5
:[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
inny
last-window
:[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
źródło
W oknie tmux spróbuj wykonać następujące czynności, aby zamienić okno 0 na 1:
$ tmux swap-window -d -s 0 -t 1
źródło
Myślę, że chcesz powiązać nową kombinację klawiszy z poleceniem „wybierz okno”.
Wiem, że powiedziałeś, że już przeczytałeś stronę podręcznika, ale powinieneś powrócić do niej. musisz zmodyfikować plik ~ / .tmux.conf, aby dodać polecenie klucza powiązania.
W szczególności spójrz na stronę 4 poniżej.
strona man tmux
źródło
choose-window
nie wydaje się przenosić bieżącego okna do nowej pozycji.choose-window
jest już związany zC-B w
.To jest metoda, której używam. Nadal nie możesz przenieść okna do zajętego indeksu, ale możesz przenieść je do wyższego (nieużywanego indeksu) i zmienić kolejność odstępu, w którym znajdował się poprzedni indeks.
Załóżmy, że masz 3 okna i chcesz dodać czwarte, ale w miejscu, gdzie wcześniej były 3.
Zanim dodasz nowe okno: Prefiks Tmux. otworzy polecenie ruchu. Wpisz 4, a indeks 3 zmieni się teraz na 4, a następnie po prostu dodaj kolejne okno i będzie on na indeksie 3, a twoje stare okno będzie nadal na indeksie 4.
źródło
Najpierw otwórz komendę tmux i zwolnij:
Aby zmienić rzeczywiste okno na prawe okno (w okrągłej kolejności), po prostu wykonaj:
Aby zmienić rzeczywiste okno w lewo:
SHIFT
po naciśnięciu}
lub{
.źródło
Tyle ile jest warte:
Zhakowałem ten skrypt razem, aby móc zamówić wszystkie okna w „TUI”. Wyświetla listę wszystkich okien w pliku tymczasowym, otwiera go w domyślnym edytorze (zakłada, że ustawiłeś $ EDITOR). Następnie możesz zmienić kolejność linii, a po zapisaniu i zamknięciu pliku okna są odpowiednio porządkowane. (Jest to podobne do zamawiania zatwierdzeń podczas wykonywania
git rebase -i
)Prawdopodobnie można by go znacznie poprawić, w szczególności:
UWAGA : Po uruchomieniu polecenia możesz zostać przeniesiony do innego okna.
Prezent w akcji (github)
źródło
Żadna z odpowiedzi tutaj mnie nie zadowoliła, więc napisałem skrypt, który (w pewnym sensie) naśladuje zachowanie
screen
oknatmux
.Wykrywa, czy docelowy numer okna jest mniejszy niż najmniejszy numer okna czy większy niż największy numer okna, a jeśli tak, przesuwa wszystkie pozostałe okna odpowiednio (odpowiednio) w prawo lub w lewo i przenosi je z przyrostem 1-N . Odbywa się to za pomocą
move-window
polecenia.Jeśli numer okna znajduje się pomiędzy najmniejszymi / największymi liczbami (tzn. Przypuszczalnie pasuje do istniejącego numeru okna), po prostu zamienia je
swap-window
poleceniem.Oto skrypt:
Następnie po prostu dodaj to proste przypisanie klucza do
.tmux.conf
:Uwaga : Aby idealnie naśladować
screen
zachowanie zamiany okien, uważam, że po przeniesieniu okna na istniejący numer okna powinno ono zająć miejsce tego okna, a wszystkie pozostałe okna są przesunięte w prawo . W tym celu zmodyfikowanie tego skryptu byłoby dość proste.źródło
Nie ma potrzeby wiersza polecenia (który jest Ctrl+, ba następnie :)
Po prostu przesuwaj okna za pomocą
Ctrl+ b+:
następnie wprowadź nowy (bezpłatny) numer okna i naciśnij Enter
Jeśli jest teraz wolny numer okna, użyj Ctrl+ b+, .aby ponownie numerować okno.
(Wskazówka: nazwij swoje okna za pomocą Ctrl+ b+, ,jeśli stracisz kontrolę nad tym, która jest która)
źródło