зеркальное отображение панели между двумя окнами

14

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

У меня обычно есть одно горизонтальное разделение в моем главном окне с vim на верхней панели (около 80-90% от высоты терминала) и командная строка на нижней панели, где я запускаю программу, над которой я работаю. Поскольку нижнее окно очень маленькое, я часто не вижу сообщений об ошибках, и использование сочетаний клавиш tmux для прокрутки назад становится утомительным. Мне бы хотелось, чтобы мое второе окно было присоединено к той же панели, чтобы, если мне нужно было увидеть больше моих сообщений об ошибках, я мог просто быстро переключиться на второе окно без необходимости иметь дело с прокруткой. Это возможно?

(Я полагаю, что одним из резервных вариантов было бы использовать что-то вроде tee для записи stdout в файл журнала и хвоста этого в моем втором окне. Я надеюсь, что в этом нет необходимости)

Уилл Норрис
источник

Ответы:

7

По умолчанию вы можете переключать «состояние масштабирования» панели, нажимая Prefixи z(префикс по умолчанию - Ctrl+B).

Это позволит текущей панели (например, панели командной строки) занимать все окно. Нажмите Prefixи еще zраз, чтобы «уменьшить масштаб» панели.

Кусалананда
источник
10

Боюсь, что это одна из вещей, с которыми вы не можете справиться tmux(я бы ожидал, что главной причиной будет проблема с отображением одной панели в нескольких пространствах разных размеров). Однако есть несколько способов обойти это - все они основаны на привязке определенных действий к некоторым комбинациям клавиш. Поскольку многое зависит от используемого макета, наличие простого макета с двумя упомянутыми панелями значительно упрощает вашу жизнь

  1. rotate-window - он просто поменяет панели, что даст вам 80% -90% для вывода команды (и небольшое окно для ViM).

  2. break-pane против join-pane -v -p <preview_percentage> -t !

  3. pipe-paneс commandперенаправлением без буферизации в именованный канал (т. е. узел файловой системы, созданный с помощью mkfifo) - затем используйте tail -fэтот именованный канал в другой панели.

  4. направить вывод в less, который также имеет следующий режим tail(по крайней мере, один GNU).

  5. resize-pane -Zна меньшей панели увеличит его на полном терминале. Последующее un-zoom будет держать его активным, поэтому для его комфортной работы потребуется немного хитрости.

peterph
источник
2
Кстати: «Я бы ожидал, что проблемы с отображением одной панели в нескольких пространствах разных размеров будут главной причиной». Это может быть фактором сложности ее реализации, но tmux поддерживает то же самое на уровне окна, с помощью группировки сеансы unix.stackexchange.com/questions/24274/… . Это просто добавляет заполнение ниже к меньшему окну. Теоретически зеркальное отображение панели можно сделать таким же образом.
mahemoff
Хм ... вы правы, это может быть способ пойти на это.
Петер
1

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

На вашей рабочей панели.

script -f tailme.out

И в вашей области просмотра.

tail -f tailme.out
slimisjim
источник
1

Я согласен с другими, что для вашего случая Prefix+ zбыло бы самым прямым решением, но для общего вопроса о зеркалировании панели есть некоторый хак, который может сработать - вложение сеанса экрана в tmux.

Установите экран GNU, затем запустите его для панели, которую вы хотите отразить. Затем screen -xприкрепить к другим панелям.

Вы также можете вкладывать в панель другой сеанс tmux, если хотите, но сеансы tmux должны быть вложены с осторожностью.

Мэтью
источник