Как скрыть панель tmux?


60

У меня есть 3 панели в окне tmux:

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

Панели 1 и 2 есть vim. Панель 3 работает в клике, которую я разрабатываю. Иногда я хочу сравнить панели 1 и 2, поэтому я хочу скрыть панель 3:

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

и затем верните панель 3 снова. Я не хочу убивать панель 3, потому что я настроил некоторые вещи там и не хочу идти, хотя настраиваю их снова.

  • Есть ли что-то похожее на PREFIX + zмасштабирование панели 2, но не касаясь панели 1? Или же
  • Есть ли способ быстро скрыть панель 3 и восстановить ее при необходимости?

Ответы:


71

Используйте break-paneи join-paneкоманду. Обратитесь к man tmuxподробностям, опциям и использованию.


Скрыть панель 3:

Выберите панель 3и введите Prefix- :break-pane -dP.

tmuxотправит панель 3в окно на заднем плане ( -dфлаг) и напечатает некоторую информацию о нем на панели 2 ( -Pфлаг). По умолчанию вы увидите что-то вроде 1:2.0(имеется в виду:) session:window.pane. Нажмите, qчтобы продолжить работу. 1

1 С некоторой практикой вы сможете сбросить -Pфлаг, поскольку вы можете предсказать session:window.paneтриплет: по sessionумолчанию используется текущий сеанс, а по paneумолчанию 0время windowбудет следующим свободным идентификатором окна.

Верните панель 3:

Чтобы получить панель 3и макет обратно, выберите панель 2и вопрос Prefix- :join-pane -vs 1:2.0рассказывал tmuxна разделенную панель 2вертикально ( -v) и присоединиться к (источник) панели ( -s) с идентификатором 1:2.0. При желании, вы можете оставить либо sessionили на paneидентификатор. Также обратите внимание, что tmux хранит историю командной строки, удобно доступную с Prefix- :- Up.

Вам, вероятно, понадобится некоторое время, чтобы освоить его, но как только вы это сделаете, вы наверняка сможете придумать удобные для вас привязки клавиш.


Этот вопрос содержит полезную информацию и советы, которые могут улучшить ваш рабочий процесс.


Четкие инструкции! У меня работает плавно, намного лучше, чем мой ответ!
Бернхард

По умолчанию панель 3 будет разбита на последнее окно, если у вас уже есть 3 окна в текущем сеансе, панель станет окном 3 (предположим, что окно начинается с 0), поэтому значение 3 в «окне 3» зависит от открытые окна, как я могу заставить это работать в привычных сочетаниях клавиш?
CodyChan

5

Идея: запустить tmux в tmux.

Оригинальная настройка:

Панель 1 и Панель 2; бок о бок. Запустите vim на панели 1 как обычно.

На панели 2 снова запустите tmux и создайте две панели (на этот раз одна поверх другой). Затем запустите vim на панели 2.1 и свой CLI на панели 2.2. Это должно позволить вам перейти на полноэкранную панель 2.1 со вторым экземпляром Vim, что приведет к желаемому поведению.


это то, что я называю нестандартным мышлением!
user881300

Спасибо user881300. У него есть некоторые недостатки (возможность отправлять команды имеет несколько причуд, например). Я надеюсь обновить его до более полного ответа после того, как я проверил его - мне самим нужна подобная функциональность.
BinaryBen

2
@ user881300 Технически, это коробка в поле мышления.
Матеин Улхак

3

Вместо того, чтобы скрывать панель 3, вы также можете немного обмануть и сделать ее очень маленькой, что, вероятно, также подойдет для вашего случая.

Когда панель 2 является активной, вы можете

PREFIX : resize-pane -D 40

Затем, чтобы переместить его снова, вы можете либо

PREFIX : resize-pane -D 28

где вам придется заменить 28 на порядочное число, или, вместо этого, вы можете попробовать PREFIXEsc4, что делает автоматическое изменение размера.


Я изменял размеры панели, set -g mouse-resize-pane onно кроме изменения размера есть ли у нас другие варианты?
user881300

@ user881300 Я ни в tmuxкоем случае не эксперт, но мне было бы интересно узнать, возможно ли это.
Бернхард

1
CTRL+B, ALT+<arrow direction to resize>, чем CTRL+B, ESC, 4(thx @Bernhard), чтобы восстановить его.
FelikZ

1

Мне этот вопрос уже почти 5 лет, но я нашел его только потому, что хотел сделать что-то похожее, и благодаря ответу user78291 я нашел следующие сочетания клавиш :

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

Таким образом, я могу использовать, Prefix!чтобы скрыть текущую панель и Prefix@вернуть ее обратно. Приятно то, что таким образом я могу скрыть несколько панелей.

Это далеко от совершенства, но оно делает работу, скрывая панели и возвращая их довольно хорошо.


0

Я знаю, что на самом деле это не скрывает панель, над которой вы работаете, но я пытался сделать это, чтобы tmux не отправлял общие команды в выбранные окна, и нашел гораздо более простое решение.

Если вы не хотите визуально скрывать панель, а просто хотите остановить любой ввод, идущий на панель. Сценарий может быть таким: вы хотите отправить команду на 5 открытых панелей, но не хотите отправлять ее на 2 из них.

В этом случае вы можете делать ctrl + sна панелях, на которые вы не хотите, чтобы команды шли ( ctrl + sблокирует весь ввод на панель).

Когда вы закончите, нажмите, ctrl + cчтобы вернуться.

Примечание . Не нажимайте ctrl + qпосле команд, поскольку они будут запускать все команды на этом экране. ctrl + cне буду этого делать (пробовал на Ubuntu).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.