Jak przechodzić między oknami w oknie w Tmuxie jak na ekranie?

41

Myślałem, że przeniesienie panelu tmux do okna było tym samym pytaniem, ale tak nie jest.

Biorąc pod uwagę regularne używanie ekranu GNU, szukam tmux do robienia tych samych rzeczy. Jedną z rzeczy, które robię regularnie, jest kilka różnych okien, jedno z pewnym kodem otwartym w vimie, i kilka okien terminali otwartych do testowania kodu, a czasem okno lub dwa dla różnych innych rzeczy. Dzielę ekran pionowo i często mam okno vim w górnym okienku, a następnie jedno z pozostałych okien w dolnym okienku.

Główne polecenia I wtedy stosowanie jest Ctrla, Tababy obrócić między szybami i Ctrla, naby obrócić między oknami w ramach panelu. Na przykład, z vimem w górnym panelu, przełączam się do dolnego panelu, a następnie obracam się przez inne terminale, robiąc wszystko, czego potrzebuję. Ekran pozostaje podzielony przez cały czas.

Problemem jest to, że nie może znaleźć porównywalną zdolność ekranem Ctrla, nw tmux. Przełączanie okien wydaje się nie działać w okienku, ale przeskakuje całkowicie. Jeśli ekran jest podzielony, wydaje się, że jedynymi dwiema opcjami jest przejście do okna, które nie jest podzielone, a następnie podzielenie go lub wykonanie podziału części okienka. Nie są też tym, czego szukałem.

Sugestie (oprócz zwykłego trzymania się ekranu)?

FooBar
źródło
Twoja terminologia jest trochę myląca. W tmuxoknie można podzielić na wiele paneli. Czy próbujesz przełączać się między oknami w oknie ze skrótem klawiszowym?
jasonwryan
Próbowałem podążać za nomenklaturą narzędzi, ale przyznaję, że jest to mylące. Wiem, jak zmienić fokus z jednego panelu na inny. Próbuję dowiedzieć się, jak wyświetlać cyklicznie to, co jest wyświetlane w określonym okienku, bez zmiany układu.
FooBar,
Więc przenieść zawartość z jednego panelu do drugiego? Szukasz swap-pane? Jeśli chcesz emulować ekrany Ctrl-a n, to odpowiednikiem tmux jest Ctrl-b n.
jasonwryan

Odpowiedzi:

28

tmux i screen mają różne modele, więc nie ma dokładnego odpowiednika.

W kategoriach ekranowych podział umożliwia wyświetlanie wielu okien jednocześnie. next( C-a n) obraca okna przez aktywną część podziału; pozwala to obracać „ukryte” okna przez aktywny region podziału.

W terminach tmux podział dzieli okno na jedną lub więcej paneli. Każda część podzielonego okna jest oddzielnym panelem, panele nigdy nie są ukryte (jeśli okno jest wybrane (widoczne), wszystkie jego panele też są), a panelu można używać tylko w jednym podziale jednego okna (panel może nie może znajdować się w wielu oknach i nie może znajdować się w wielu podziałach tego samego okna). Istnieją polecenia do przenoszenia paneli w oknach (lub między nimi), ale nie w identyczny sposób jak nextna ekranie .


Możesz użyć powiązania takiego jak poniżej, aby uzyskać podobny efekt:

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

Prawdopodobnie będziesz chciał umieścić to w swoim ~/.tmux.confpliku, ale możesz po prostu wpisać / wkleić go później, Prefix :aby powiązać go z bieżącą instancją serwera.

Aby użyć powiązania, wybierz „główne okno”, podziel je, utwórz okno „kontener okienkowe” bezpośrednio za „głównym oknem”, a następnie użyj wiązania, aby obrócić dowolne okienko w „głównym oknie” pomiędzy grupą w „ okienko kontenerowe ”.

Oto, w jaki sposób możesz utworzyć konfigurację:

  • Wybierz okno, które ma być używane jako „okno główne”. Uruchom (np.) Vim w nim.

  • Podziel „główne okno” na dwa panele.

    Eg Prefix "( :split-window)

    Możesz użyć tego panelu jako okna testowego (lub przeglądarki dziennika lub cokolwiek innego).

  • Utwórz nowe okno („pojemnik okienkowy”) bezpośrednio za głównym oknem.

    Eg Prefix c( :new-window)

    Ważne jest, aby żadne inne okno nie znajdowało się między indeksami „okna głównego” i okna „kontenera okienkowego” ( +w okienku specyfikatory używane w powiązanych poleceniach oznaczają „następne okno o wyższym numerze”).

  • Podziel to okno na kilka paneli. Aby obrócić trzy panele, podziel to okno na dwa panele (trzeci panel to ten w „oknie głównym”).

    Być może potrzebujesz powłoki dla git i powłoki do uruchamiania interfejsu bazy danych. Umieść każdy w osobnym okienku w tym oknie „kontenera okienkowego”.

  • Wróć do „głównego okna”. Wybierz okienko, które chcesz „obrócić”.

    Możesz używać Prefix Up/ Down/ Left/ Rightdo poruszania się między panelami.

  • Wywołaj powiązanie, aby zamienić bieżący panel z pierwszym panelem w oknie „kontener okienkowy” i („za kulisami”) obrócić panele wewnątrz okna „kontener okienkowy” (tak, aby następnym razem, gdy uruchomisz wiązanie, pierwsze polecenie zamienia z oknem „next” w sekwencji).

    Prefix Control- n(wiązanie używa Cn, ale możesz to zmienić na cokolwiek zechcesz).

  • Aby przewijać panele do tyłu, możesz skorzystać z poniższych:

klucz powiązania Cp swap-pane -s: +. bottom \; obróć okno -Dt: +
Chris Johnsen
źródło
Dziękuję Ci! Świetne wyjaśnienie i sugerowane powiązanie wydają się przynajmniej replikować funkcjonalność, której szukałem.
FooBar
Przepraszam, jak można w pełni powiększyć taflę, a następnie wrócić do poprzedniego układu
MageProspero,
1
@JamesAndino: tmux 1.8 ma resize-pane -Z(domyślnie związany z Prefiksem + z), który tymczasowo „powiększa” panel, aby uzyskać pełny rozmiar okna. W przypadku wersji wcześniejszej niż 1.8 nie było wbudowanego sposobu, aby to zrobić; inni stworzyli rozwiązania skryptowe z innych wbudowanych poleceń (np. niektóre odpowiedzi na pytanie SU „Maksymalizacja” panelu w tmux ).
Chris Johnsen
ty, skompilowany i załadowany
MageProspero
3
Wierzę, że C-b ocykluje szyby.
Sam Selikoff,
39

Wierzę, że to, czego szukasz, jest Ctrlb+ ( , , , ). Umożliwi to przemieszczanie się między szybami.

sparticvs
źródło
2
Przepraszam, ale nie byłem bardzo jasny. Wymyślam, jak poruszać się między panelami. W tmux Ctrl b + o działa mniej więcej tak samo jak Ctrl a + Tab na ekranie. To, czego szukam, to równoważna funkcjonalność jak Ctrl a + n ekranu.
FooBar
@FooBar co powiesz na Ctrl-b+{lub Ctrl-b+}? To prawie tak blisko, jak mogę znaleźć tej funkcji. Okienka nie są wykonywane w tmuxie tak samo, jak są obsługiwane na ekranie.
sparticvs
Często mam problemy z ustawieniem podświetlonego panelu, powiedzmy, że mam dwa panele, często naciskam ^b↑. Jak w takim razie skupić podświetlony panel, aby inny został przechwycony przez powłokę, a nie tmux?
ThorSummoner,
6

użyj bind -r, aby nacisnąć prefixjeden raz, a następnie inne klawisze w sekwencji, aby zlokalizować panel. Limit czasu można zmienić o repeat-time. Czekman tmux

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

Jeśli wolisz 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
źródło
2

Oto małe conf, które pozwala przejść do kolejnych okien lub okien za pomocą skrótów ALT lub SHIFT + strzałka. Nie ma potrzeby używania prefiksu klucza jest wygodne.

## 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

Jeśli jesteś bardziej leniwy ode mnie, możesz również zainteresować się poniższym kodem, który umożliwia nawigację paneli za pomocą myszy. (użycie: prefiks klawisza + m, aby włączyć, M, aby wyłączyć)

## 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'

ta konfiguracja powinna działać na pewno działa dla Tmux 1.6 do 1.9.

xaa
źródło
2

Odpowiedzi te dają dwa panele, w których oba panele zawierają ten sam zestaw okien, ale każdy panel może przełączać się między oknami niezależnie.

Podejście tmux polega na użyciu trzech sesji:

  • sesja zewnętrzna dla szyb ,
  • wewnętrzna sesja dla okien (możesz dołączyć do tego z jednego panelu),
  • drugi widok na sesję wewnętrzną (dla drugiego panelu).

Tak, to oszalała filozofia UNIX . Zacznijmy:

# 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

Teraz możesz przejść do górnego panelu i jak zwykle otworzyć Vima. Aby przechodzić między oknami w sesji wewnętrznej (dolny panel), musisz użyć Ctrl-b Ctrl-b ni p.

Poza tym: To trochę nieporęczne, ale zawsze możesz zmienić prefiks sesji zewnętrznej, np. Na Ctrl-a:

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

Wtedy byłoby po prostu Ctrl-b ni pcyklicznie otwierać okna wewnętrzne i Ctrl-a ocyklować szyby zewnętrzne.

OK, teraz zamiast otwierać Vima w górnym okienku, połączmy się ponownie z twoją wewnętrzną sesją. Zamknij vima i tym razem użyj new-sessionkomendy (zwłaszcza z -tnot -s):

$ tmux new-session -t inner

Voila! Możesz teraz przełączać się między oknami na górnym i dolnym panelu.

Powodem, dla którego musimy użyć new-session -tdrugi raz, jest to, że jeśli po prostu zrobimy to attach -tponownie, wówczas górne i dolne panele zostaną zsynchronizowane, zawsze pokazując to samo okno, co nie jest tym, czego chcesz. Aby umożliwić temu panelowi poruszanie się po oknach niezależnie od drugiego, tworzymy nową sesję „widoku”, ale łączymy jej zaplecze bezpośrednio z istniejącą sesją, w której znajdują się okna. Jest to również znane jako „ sesje zgrupowane ”. (Nawiasem mówiąc, ten link sugeruje również używanie [un]link-windowdo przenoszenia okien między sesjami).

Oczywiście dla symetrii mógłbyś także biegać tmux new-session -t innerw dolnym okienku zamiast attach. W takim przypadku uruchomiłbyś 4 instancje tmux (plus jeszcze jeden proces tmux dla serwera)!

joeytwiddle
źródło
0

Umieść następujący kod w swoim .tmux.conf:

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

Ponownie załaduj konfigurację, a następnie możesz nacisnąć (bezpośrednio bez klawisza prefiksu) Shift+, aby przełączać panele w kierunku zgodnym z ruchem wskazówek zegara, i Shift+, aby przełączać cykl w kierunku odwrotnym.

Testowane w Tmux 2.8.


Jeśli nie chcesz edytować konfiguracji, prefix+ ojest domyślnym przypisaniem klawiszy dla cyklu zgodnego z ruchem wskazówek zegara. Od czasu do czasu znajdowałem to powiązanie klawiszy, a następnie otrzymuję polecenie tmux list-keysi używam go do własnych powiązań klawiszy:

bind-key    -T prefix       o                 select-pane -t :.+
Reorx
źródło