Przeniesienie panelu tmux do okna

228

Jak przenieść istniejący panel do innego okna w Tmuxie, gdy mam wiele okien i odwrotnie?

Wychodzę z ekranu , gdzie mogę przejść do panelu, a następnie przełączać okna, aż dojdę do tego, którego chcę; Wydaje się, że tmux na to nie pozwala.

mrlanrat
źródło

Odpowiedzi:

209

Polecenie, aby to zrobić, znajduje się join-panew tmux 1.4.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Like split-window, but instead of splitting dst-pane and creating
    a new pane, split it and move src-pane into the space.  This can
    be used to reverse break-pane.

Aby to uprościć, mam dla tego następujące powiązania .tmux.conf:

# pane movement
bind-key j command-prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:"  "join-pane -t '%%'"

Pierwszy chwyta panel z okna docelowego i łączy go z bieżącym, drugi robi odwrotnie.

Następnie możesz ponownie załadować swoją sesję tmux, uruchamiając w sesji następujące czynności:

$ tmux source-file ~/.tmux.conf
jasonwryan
źródło
Próbuję tej metody, ale kiedy wstawiam twój kod do mojego pliku .tmux.conf i wykonuję Ctrl-b, j, nic się nie dzieje.
mrlanrat
2
Potrzebujesz co najmniej 2 okien z kilkoma oknami w każdym: następnie naciśnij Prefix+si wprowadź nazwę okna w monicie, aby wysłać okienko do tego okna ...
jasonwryan
Nadal nie mam z tym szczęścia, nic się nie dzieje. Mam wrażenie, że tmux nie czyta pliku .tmux.conf, ponieważ w ogóle nie reaguje na Ctrl-b, j lub Ctrl-b, s. (są to jedyne 2 linie w pliku konfiguracyjnym)
mrlanrat
7
@mrlanrat Uważam, że musisz poprzedzić numer okna dwukropkiem. Zobacz moją odpowiedź poniżej.
Bruno Bronosky
1
Do czego odnosi się „%%”?
oligofren
152

okienko do łączenia jest odpowiedzią. Ja również miałem problemy z moimi próbami użycia go na podstawie dokumentacji tmux. Odkryłem, że przełączniki -t i -s wydają się akceptować okno [session]: window, a nie [session:]. To znaczy, że określenie sesji jest opcjonalne, ale włączenie: jest obowiązkowe. (Używam Tmux 1.5)

Dlatego w celu dodania okienka do bieżącego okna i umieszczenia okna 1 w okienku, polecenie brzmiałoby (Ctrl-B lub dowolny inny klucz powiązania, a następnie) ...

:join-pane -s :1

Następnie możesz je rozbić za pomocą okienka, które domyślnie to: Ctrl-B! Jeśli chcesz powiązać go ze skrótem, sugeruję, aby NIE zastępować domyślnego wiązania, takiego jak s, ponieważ po drodze będziesz szukać w Internecie odpowiedzi, która obejmuje sesję wyboru i nie będzie działać w twoim systemie. Zauważ, że szyba podziału jest związana! a @ jest tuż obok i domyślnie nie jest z niczym związany. Z tego powodu sugeruję to wiązanie ...

bind-key @ command-prompt -p "create pane from:"  "join-pane -s ':%%'"

Alternatywnie, aby mieć interaktywny selektor ...

bind-key @ choose-window 'join-pane -h -s "%%"'

Alternatywnie, aby zawsze dołączać do ostatnio odwiedzanego okna ...

bind-key @ join-pane -h -s !

UWAGA: -hPowoduje, że układa panele poziomo (z podziałem pionowym), w przeciwieństwie do domyślnego zachowania, które jest odwrotne.

Najważniejszą rzeczą jest to, aby UCZYĆ się tego, co wybierzesz skrótem. Ponieważ jeśli go po prostu ustawisz i zapomnisz, zostaniesz wciągnięty, gdy znajdziesz się na obcym serwerze. I spójrzmy prawdzie w oczy, najważniejszą rzeczą, jaką zapewnia multiplekser terminali, są niezawodne sesje na zdalnych serwerach.

To kończy moją konwersję z ekranu GNU do Tmux. Nigdy się nie obejrzę.

Cieszyć się!

Bruno Bronosky
źródło
2
Brakowało mi również „:”… dzięki za to.
rascalking
Niedawno otrzymałem 2 głosy w tej sprawie bez komentarzy sugerujących dlaczego. To po prostu niegrzeczna i anty-FOSS kultura.
Bruno Bronosky,
1
dokumentacja w ogóle nie mówi o dwukropkach! Niezły
JonnyRaa
1
Używanie składni kropkowej pomogło mi window.panena przykład join-pane -s 1.0przenieść panel 0 w oknie 1 do bieżącego okna. Więcej informacji na maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras
Począwszy od tmux 2.1, :najwyraźniej nie jest już wymagany (np. Po prostu zrób :join-pane -s 1). Być może był to błąd we wcześniejszych wersjach
villapx
38

Myślę, że bardziej podoba mi się to, czego używałem do przenoszenia paneli do ich własnych okien. używam

break-pane -t :

Zrozumiałem to przez eksperymenty, ale wydaje się, że działa to bardzo dobrze. Możesz łatwo przypisać klawisz lub alias, nie wymaga skryptowania.

Joshua K.
źródło
2
+1. Zwykle używam tego znacznie częściej niż join-pane.
Chris B,
14

Jeśli nie chcesz wpisywać identyfikatora panelu w pytaniu, możesz także użyć

bind-key j "join-pane -s !"

który połączy ostatnie aktywne okienko / okno z bieżącym oknem.

Bernhard T.
źródło
1
Której wersji używasz? Dostaję unknown command: join-pane -s !z 1.6.
paradroid
Użycie tutaj 2.0, ale samo wstawienie wiersza do conf bez cudzysłowów wydaje się działać dobrze. bind-key j join-pane -s !
bkzland
13

Po przejrzeniu innych odpowiedzi i przejrzeniu strony podręcznika użytkownika tmux zdecydowałem się na następujące powiązania:

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

To pozwoli ci interaktywnie wybrać okno, które chcesz połączyć, i odzwierciedla moje małe litery s/ vpowiązania, tworząc nowe podziały pionowe / poziome. Jeśli ktoś wie, jak wybrać pojedyncze panele zamiast okien, daj mi znać.

toupeira
źródło
To jest bardzo pomocne. Dziękuję Ci. Niestety -vi -hnie tworzą odpowiednio „podziałów” pionowych i poziomych. Tworzą odpowiednio pionowe i poziome „ stosy ”. (To znaczy, że pionowo ułożone szyby mają poziomy podział). Więc musisz wytrenować swój mózg w ten sposób. Również -vjest domyślna, więc ja zostawiam to na zewnątrz i tylko umieścić -htam tak, że ~/.tmux.confdziała jako ściągawki dla ciebie patrzeć.
Bruno Bronosky,
Podoba mi się to bardziej niż inne odpowiedzi na „przeciwieństwo szyby”. Tymczasowo rozbiłem szybę do własnego okna, później chcę odesłać ją z powrotem do jednego ze starszych okien, a to z gracją sobie z tym radzi.
Stabledog
13

Wiązanie klucza

Domyślnie Ctrl+ b, !by złamać aktywnego okienka do nowego okna i przejść do niego.

Gdzie Ctrl+ bto domyślny przedrostek dla .

Detale

tmuxPolecenie to jest kluczowe Wykonuje break-pane(alias: breakp) wprowadzone w cmd-break-pane.czwiązał jako domyślny w klucza bindings.c jak widać w list-keys(alias: lsk) wyjście polecenia:

bind-key    -T prefix       !                 break-pane
muru
źródło
4

Nie musisz zmieniać przypisań klawiszy.

Podczas gdy fokus, który chcesz przenieść, jest aktywny, wpisz Prefiks, a następnie :join-pane -t :1gdzie 1jest dowolny numer okna docelowego w tej samej sesji. Możesz przenieść go do innej sesji, przygotowując jego nazwę jak project:3. Dla mnie join-panetab-autouzupełnianie z j.

Dodaj -hlub -vprzełącz do polecenia, aby ustawić orientację nowego podziału utworzonego w miejscu docelowym, lub po prostu przejdź do niego i Prefiks +, spaceaby zmienić kolejność.

Walf
źródło