Tmux: Как я могу связать окно как разделенное окно?

33

Как я могу получить окно из совершенно другой сессии tmux и прикрепить его как горизонтальное / вертикальное разделение к текущему окну?

pielgrzym
источник

Ответы:

45

Звучит так, как будто вы ищете объединенную панель. Технически для второй части вашего вопроса вы хотите присоединить панель к текущему окну, а не к полному окну из другого сеанса, поскольку это может включать несколько панелей.

Вот пример. Допустим, вы находитесь в сеансе 0, окне 4 и в сеансе 2, для которого требуется панель 1 окна 3. В приглашении tmux ( ctrl+b :по умолчанию)

join-pane -s 2:3.1

Это переместит панель 1 из окна 3, сеанс 2 (-s является исходным окном и принимает формат сеанса: window.pane) в текущий сеанс (сеанс 0).

Ниже приведены полные документы для join-pane, которые вы можете получить на странице руководства tmux. Самым запутанным моментом, когда я читал документы, было выяснение формата, который ожидался для src-pane с указанием номеров сессий, окон и панелей ( session:window.paneв приведенном выше примере). Вы также можете назвать свои сеансы и окна и использовать эти имена вместо номеров индексов.

 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.
mmrobins
источник
9
Могу ли я скопировать панель вместо ее перемещения?
pielgrzym
@pielgrzym Я бы тоже хотел узнать ответ на этот вопрос. Пожалуйста, оставьте это здесь, если найдете.
Бруно Броноски
Я думаю, что OP искал что-то более похожее на панель ссылок, которой, к сожалению, не существует. Очевидно, запрошенное поведение может быть имитировано с помощью вложенного сокета tmux, как описано здесь: superuser.com/a/323658
elig
16

Если вы пытаетесь объединить панели из одного сеанса, вы инстинктивно захотите пропустить «session:» в команде. Это не удастся. Похоже, что переключатели -s и -t в join-pane принимают аргумент в виде [session]: window [.pane] вместо [session:] window [.pane]

То есть, сессия необязательна, а: обязательна. Это глупо Было бы равносильно тому, что браузеры требуют http://google.com:/ в качестве сокращенной версии http://google.com:80/ и сообщают об ошибке http://google.com/ o_O

С Ctrl-B! разбивает текущую панель на отдельное окно (что противоположно тому, что мы хотим сделать), и ctrl-b @ (который рядом!) по умолчанию не привязан (то есть вы ничего не перезаписываете). Я предлагаю создать этот ярлык ...

bind-key @ command-prompt -p "create pane from:"  "join-pane -s ':%%'"
Бруно Броноски
источник
Хорошая привязка там.
Nishant