it-swarm-ru.tech

Перемещение панели tmux в окно

Как переместить существующую панель в другое окно в tmux, когда у меня несколько окон, и наоборот?

Я иду из screen, где я могу переключиться на панель, а затем переключать окна, пока не доберусь до нужного; tmux не позволяет этого.

241
mrlanrat

Команда сделать это join-pane в 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.

Чтобы упростить это, у меня есть эти привязки в моем .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 '%%'"

Первый захватывает панель из целевого окна и присоединяет ее к текущей, второй делает обратное.

Затем вы можете перезагрузить сеанс tmux, выполнив следующее из этого сеанса:

$ tmux source-file ~/.tmux.conf
221
jasonwryan

панель соединения это ответ. У меня тоже были проблемы с попытками использовать его на основе документации tmux. Я обнаружил, что -t а также -s переключатели, кажется, принимают [session]:window и не [session:]window. То есть указание сеанса не является обязательным, но включает : является обязательным. (Я использую tmux 1.5)

Поэтому, чтобы добавить панель в текущее окно и поместить окно 1 в панель, команда должна быть (Ctrl+B или какой бы ни был ваш ключ привязки, а затем) ...

:join-pane -s :1

Затем вы можете разбить их на две части, по умолчанию это: Ctrl+B! Если вы хотите привязать его к ярлыку, я НЕ предлагаю переопределять привязку по умолчанию, такую ​​как s, потому что в будущем вы будете искать в Интернете ответ, который включает выбор сеанса, и он не будет работать в вашей системе. Обратите внимание, что панель останова связана с ! а также @ находится рядом с ним и не привязан ни к чему по умолчанию. По этой причине я предлагаю этот обязательный ...

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

Альтернативно, чтобы иметь интерактивный выбор ...

bind-key   @ choose-window 'join-pane -h -s "%%"'
bind-key [email protected] choose-window 'join-pane    -s "%%"'

Альтернативно, чтобы всегда присоединяться к последнему посещенному окну ...

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

Обратите внимание -h заставляет его размещать панели горизонтально (с вертикальным разделением), в отличие от поведения по умолчанию, которое является обратным.

Самое главное, что вы узнаете, что вы выбрали для ярлыка. Потому что, если вы просто установите его и забудете, вы будете раздражены, когда окажетесь на чужом сервере. И давайте посмотрим правде в глаза, самое важное, что дает терминальный мультиплексор - это надежные сеансы на удаленных серверах.

На этом мое преобразование из GNU Screen в Tmux) завершено. Я никогда не оглядываюсь назад.

Наслаждайтесь!

167
Bruno Bronosky

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

break-pane -t :

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

45
Joshua K

Связывание ключей

По умолчанию, Ctrl+b!  сломать активную панель в новом окне и переключиться на нее.

Куда Ctrl + b по умолчанию префикс для tmux .

Подробности

Команда tmux, которую выполняет этот ключ: break-pane (псевдоним: breakp) как реализовано в cmd-break-pane.c и привязан по умолчанию в key-bindings.c как видно в list-keys (псевдоним: lsk) вывод команды:

bind-key    -T prefix       !                 break-pane
15
user86041

Если вы не хотите вводить идентификатор панели в подсказку, вы также можете использовать

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

который присоединит последнюю активную панель/окно к текущему окну.

14
Bernhard T

Посмотрев другие ответы и просмотрев справочную страницу tmux, я остановился на следующих привязках:

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

Это позволит вам в интерактивном режиме выбрать окно для присоединения и отразить мои привязки s/v в нижнем регистре для создания новых вертикальных/горизонтальных разбиений. Если кто-нибудь знает, как выбрать отдельные панели вместо окон, дайте мне знать.

14
toupeira

Вам не нужно менять привязки клавиш.

Пока панель, которую вы хотите переместить, имеет фокус, введите Префикс, затем :join-pane -t :1 где 1 - это любой номер окна назначения в том же сеансе. Вы можете переместить его в другой сеанс, добавив его имя, например project:3. Для меня join-pane tab-autocompletes из j.

Добавить -h или -v переключитесь на команду, чтобы задать ориентацию нового разбиения, созданного в месте назначения, или просто перейдите к нему и Префиксspace переставить.

4
Walf