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

Вопрос или проблема

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

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

Команда для этого – join-pane в tmux 1.4.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Как split-window, но вместо разделения dst-pane и создания
    новой панели, разделяет её и перемещает src-pane в освободившееся место. Это можно
    использовать для обратного действия break-pane.

Чтобы упростить это, у меня есть следующие привязки в .tmux.conf:

# перемещение панелей
bind-key j command-prompt -p "присоединить панель из:"  "join-pane -s '%%'"
bind-key s command-prompt -p "отправить панель в:"  "join-pane -t '%%'"

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

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

$ tmux source-file ~/.tmux.conf

Допустим, вы находитесь в панели (в окне 1), которую хотите s отправить в окно 0. Чтобы выполнить команду, вы можете сделать

PREFIX s 

И когда появится подсказка “отправить панель в: , введите :0<Enter> (обратите внимание на двоеточие).

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

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

:join-pane -s :1

Вы затем можете разъединить их с помощью break-pane, который по умолчанию это: Ctrl+B !. Если вы хотите привязать это к сочетанию клавиш, я предлагаю не переопределять стандартную привязку как s, потому что позже вы будете искать в интернете ответ, который включает choose-session, и он не будет работать на вашей системе. Заметьте, что break-pane привязан к !, а @ находится рядом и по умолчанию не привязан ни к чему. По этой причине я предлагаю следующую привязку…

bind-key @ command-prompt -p "создать панель из:"  "join-pane -s ':%%'"

В качестве альтернативы, чтобы иметь интерактивный выбор…

bind-key   @ choose-window 'join-pane -h -s "%%"'
bind-key C-@ choose-window 'join-pane    -s "%%"'

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

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

ПРИМЕЧАНИЕ: -h заставляет панели располагаться горизонтально (с вертикальным разделением) в отличие от поведения по умолчанию, которое является обратным.

Самое важное, что вам нужно ЗНАТЬ то, что вы выберете в качестве сочетания клавиш. Потому что если вы просто установите это и забудете, вы будете в затруднении, если окажетесь на чужом сервере. И давайте смотреть правде в глаза, самое важное, что предоставляет вам мультиплексор терминала — это надежные сессии на удаленных серверах.

Это завершает мою миграцию с GNU Screen на Tmux. Я никогда не оглянусь назад.

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

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

break-pane -t :

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

Привязка клавиш

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

Где Ctrl + b – это стандартный префикс для .

Детали

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

bind-key    -T prefix       !                 break-pane

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

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

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

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

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

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

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

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

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

вот принести панель из как функция fzf-tmux.

просто поместите это в какой-то файл:

function bring_pane() {
    windows=$(
        tmux list-windows -F "#{window_active} #{window_index} #{window_name}" | sort -r | awk '{print $2 " : " $3}' \
            | fzf-tmux -p --border-label="Принести панель" | awk '{print $1}' | sort -r
    )
    if [ -n "$windows" ]; then
        echo $windows | xargs -n1 -I {i} tmux join-pane -s {i}
    fi
}

Затем в вашем конфигурационном файле tmux подключите это:

bind-key i run-shell "source ~/.tmux/functions.sh && bring_pane"

Ответ или решение

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

Введение

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

Основная команда: join-pane

Для перемещения панели в другое окно в tmux используется команда join-pane. Это команда, начиная с версии tmux 1.4, позволяет перенести панель из одного окна в другое без необходимости создавать новую панель. Команда выглядит следующим образом:

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]

Примечание по параметрам:

  • -s src-pane: Указывает панель-источник, которую необходимо переместить.
  • -t dst-pane: Определяет целевую панель, к которой будет присоединена панель-источник.
  • Параметр -h создаёт горизонтальное разделение, в то время как -v создаёт вертикальное.

Примеры использования команды

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

Предположим, вы находитесь в панели окна 1 и хотите переместить панель из окна 0 в текущее окно. В этом случае выполните комбинацию:

PREFIX + :join-pane -s :0

Перемещение панели в другое окно

Чтобы отправить текущую панель в другое окно, например, в окно 1, выполните следующее:

PREFIX + :join-pane -t :1

При этом будьте внимательны к синтаксису. Указывая целевое окно, обязательно применяйте двоеточие перед номером окна.

Оптимизация работы с панелями

Настройки в .tmux.conf

Для упрощения работы с панелями можно добавить несколько ключевых комбинаций в ваш файл конфигурации ~/.tmux.conf. Вот пример, как это может выглядеть:

# Панель перемещения
bind-key j command-prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:"  "join-pane -t '%%'"

С этими комбинациями вы сможете, используя PREFIX + j, выбрать панель для перемещения в текущее окно, а PREFIX + s — отправить текущую панель в другое окно.

Перерывание панели

Для того чтобы переместить активную панель в новое окно, можно использовать команду break-pane. Это делается по умолчанию с помощью клавиатурного сочетания:

PREFIX + !

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

Дополнительные функции и настройки

Использование fzf для выбора окон

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

function bring_pane() {
    windows=$(
        tmux list-windows -F "#{window_active} #{window_index} #{window_name}" | sort -r | awk '{print $2 " : " $3}' \
            | fzf-tmux -p --border-label="Bring pane" | awk '{print $1}' | sort -r
    )
    if [ -n "$windows" ]; then
        echo $windows | xargs -n1 -I {i} tmux join-pane -s {i}
    fi
}

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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...