Jak ukrywasz panel tmux?

60

W moim oknie Tmux mam 3 panele:

--------------------------
|             |      2   |
|             |          |
|        1    |----------|
|             |      3   |
|             |          |
--------------------------

Panele 1 i 2 mają vim. Panel 3 uruchamia program, który rozwijam. Czasami chcę porównać panele 1 i 2, więc chcę ukryć panel 3:

--------------------------
|             |          |
|             |          |
|        1    |       2  |
|             |          |
|             |          |
--------------------------

a następnie przywróć panel 3 ponownie. Nie chcę zabijać okienka 3, ponieważ skonfigurowałem tam kilka rzeczy i nie chcę jechać, ustawiając je ponownie.

  • Czy istnieje coś podobnego do tego, PREFIX + zco można powiększyć panel 2, ale bez dotykania panelu 1? Lub
  • Czy istnieje sposób, aby szybko ukryć panel 3 i przywrócić go w razie potrzeby?
użytkownik881300
źródło

Odpowiedzi:

71

Użyj poleceń break-panei join-pane. Szczegółowe man tmuxinformacje, opcje i zastosowanie znajdują się w.


Ukryj okienko 3:

Wybierz panel 3i wprowadź Prefix- :break-pane -dP.

tmuxwyśle ​​okienko 3do okna w tle ( -dflaga) i wydrukuje niektóre informacje na ten temat w okienku 2 ( -Pflaga). Domyślnie zobaczysz coś podobnego 1:2.0(czyli:) session:window.pane. Kliknij, qaby kontynuować pracę. 1

1 Po pewnym ćwiczeniu będziesz mógł upuścić -Pflagę, ponieważ możesz przewidzieć session:window.panetryplet: sessiondomyślnie jest to bieżąca sesja i panedomyślnie 0podczas gdy windowbędzie następnym identyfikatorem wolnego okna.

Odzyskaj okienko 3:

Aby odzyskać panel 3i układ, wybierz panel 2i problem Prefix- :join-pane -vs 1:2.0mówiąc tmuxo podzieleniu panelu 2pionowo ( -v) i dołączeniu panelu (źródłowego) ( -s) z identyfikatorem 1:2.0. Opcjonalnie możesz upuścić albo identyfikator, sessionalbo paneidentyfikator. Zauważ też, że tmux przechowuje historię wiersza poleceń, łatwo dostępną za pomocą Prefix- :- Up.

Prawdopodobnie będziesz potrzebować trochę czasu, aby się z tym pogodzić, ale kiedy to zrobisz, na pewno będziesz w stanie wymyślić niestandardowe przypisania klawiszy, które są dla ciebie wygodne.


To pytanie zawiera przydatne informacje i wskazówki, które mogą poprawić przepływ pracy.

użytkownik78291
źródło
Jasne instrukcje! Działa dla mnie płynnie, znacznie lepiej niż moja odpowiedź!
Bernhard
Domyślnie panel 3 zostanie rozbity na ostatnie okno, jeśli masz już 3 okna już w bieżącej sesji, panel zmieni się w Okno 3 (zakładając, że okno zaczyna się od 0), więc 3 w „Oknie 3” zależy od otwarte okna, jak mogę to zrobić w niestandardowych powiązaniach klawiszy?
CodyChan,
5

Pomysł: uruchom tmux w tmux.

Oryginalna konfiguracja:

Panel 1 i panel 2; obok siebie. Uruchom vim w okienku 1 jak zwykle.

W okienku 2 uruchom ponownie tmux i utwórz dwa panele (tym razem jeden na drugim). Następnie uruchom vim w okienku 2.1, a twój CLI w okienku 2.2. Powinno to pozwolić na przejście do pełnego ekranu 2.1 z drugą instancją Vima, co daje pożądane zachowanie.

BinaryBen
źródło
to właśnie nazywam nieszablonowym myśleniem!
user881300
Dzięki użytkownik888800. Ma pewne wady (np. Możliwość wysyłania poleceń ma kilka dziwactw). Mam nadzieję, że po przetestowaniu zaktualizuję to do pełniejszej odpowiedzi - sam potrzebuję podobnej funkcjonalności.
BinaryBen
2
@ user881300 Technicznie jest to myślenie pudełkowe.
Mateen Ulhaq
3

Zamiast ukrywać okienko 3, możesz także trochę oszukać i uczynić go bardzo małym, co prawdopodobnie będzie również działać w twoim przypadku.

Gdy panel 2 jest panelem aktywnym, możesz to zrobić

PREFIX : resize-pane -D 40

Następnie, aby przenieść go ponownie w górę, możesz albo

PREFIX : resize-pane -D 28

gdzie musiałbyś zastąpić 28 przyzwoitą liczbą, lub zamiast tego możesz spróbować PREFIXEsc4, a to automatycznie zmienia rozmiar.

Bernhard
źródło
Zmieniłem rozmiar panelu, set -g mouse-resize-pane onale oprócz zmiany rozmiaru mamy jakąś inną opcję?
user881300,
@ user881300 W żadnym wypadku nie jestem tmuxekspertem, ale chciałbym dowiedzieć się, czy jest to możliwe.
Bernhard
1
CTRL+B, ALT+<arrow direction to resize>, niż CTRL+B, ESC, 4(thx @Bernhard), aby go przywrócić.
FelikZ
1

Teraz to pytanie ma prawie 5 lat, ale właśnie je znalazłem, ponieważ chciałem zrobić coś podobnego i dzięki odpowiedzi user78291 wymyśliłem następujące skróty klawiszowe :

bind-key ! break-pane -d -n _hidden_pane
bind-key @ join-pane -s $.1

W ten sposób mogę użyć Prefix!do ukrycia bieżącego panelu i Prefix@przywrócenia go. Zaletą jest to, że mogę w ten sposób ukryć wiele paneli.

Jest daleki od ideału, ale ma za zadanie ukrywanie szyb i przywracanie ich całkiem dobrze.

Filipe Kiss
źródło
0

Wiem, że to tak naprawdę nie ukrywa panelu, nad którym pracujesz, ale próbowałem to zrobić, aby powstrzymać tmux od wysyłania typowych poleceń do wybranych okien i doszedłem do znacznie prostszego rozwiązania.

Jeśli nie chcesz wizualnie ukrywać panelu, ale po prostu chcesz zatrzymać wszelkie dane wejściowe do panelu. Scenariusz może polegać na tym, że chcesz wysłać polecenie do 5 otwartych paneli, ale nie chcesz wysłać go do 2 z nich.

W tym przypadku użycia możesz zrobić ctrl + sna panelach, do których nie chcesz, aby polecenia były przekazywane ( ctrl + sblokuje wszystkie dane wejściowe do panelu).

Po zakończeniu naciśnij przycisk, ctrl + caby wrócić.

Uwaga : Nie naciskaj ctrl + qpo poleceniach, ponieważ uruchomią wszystkie polecenia na tym ekranie. ctrl + cnie zrobi tego (wypróbowałem to na Ubuntu).

Fałszywy Jon Skeet
źródło