Переміщення панелі tmux до вікна


228

Як перенести існуючу панель в інше вікно в tmux, коли у мене є кілька вікон, і навпаки?

Я приходжу з екрана , де я можу перейти на панель, а потім переключити вікна, поки не дістанусь до потрібного; Здається, tmux цього не дозволяє.

Відповіді:


209

Команда зробити це 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

Я намагаюся цей метод, але коли я поміщаю ваш код у мій файл .tmux.conf і роблю Ctrl-b, j, здається, нічого не відбувається.
mrlanrat

2
Вам потрібно щонайменше 2 вікна відкрити, з кількома панелями в кожній: потім натисніть Prefix+sі введіть ім'я вікна під запитом, щоб надіслати панель до цього вікна ...
jasonwryan

Мені досі не пощастило з цим, нічого не відбувається. Я відчуваю, що tmux не читає файл .tmux.conf, оскільки він зовсім не відповідає Ctrl-b, j або Ctrl-b, s. (це єдині 2 рядки у конфігураційному файлі)
mrlanrat

7
@mrlanrat Я вважаю, що ви повинні встановити номер вікна двокрапкою. Дивіться мою відповідь нижче.
Бруно Броноський

1
Що означає "%%"?
олігофрен

152

відповідь - це відповідь. У мене теж були проблеми з моїми спробами використовувати його на основі документації tmux. Я виявив, що комутатори -t і -s, здається, приймають [session]: вікно, а не вікно [session:]. Тобто, вказати сеанс необов’язково, але включити: обов'язково. (Я використовую 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 @ join-pane -h -s !

ПРИМІТКА. -hПричини змушування панелей горизонтально (з вертикальним розщепленням) на відміну від поведінки за замовчуванням, яка є зворотною.

Найголовніше - це НАВЧАЙТЕ, що б ви не вибрали для ярлика. Тому що, якщо ви просто встановите його і забудете його, ви будете хитатися, опинившись на іноземному сервері. І давайте визнаємо, найважливіше, що дає термінальний мультиплексор, - це надійні сеанси на віддалених серверах.

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

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


2
Я також пропустив ':', а також ... дякую за це.
лунати

Нещодавно я отримав 2 голоси проти цього, без жодних коментарів, на яких можна сказати, чому. Це просто груба та анти-FOSS культура.
Бруно Броноський

1
документація зовсім не говорить про колонок! Хороший
JonnyRaa

1
Використання крапкового синтаксису допомогло мені, window.paneнаприклад, join-pane -s 1.0перемістити панель 0 у вікні 1 у поточне вікно. Детальніше на maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras

Щодо tmux 2.1, :очевидно, це більше не потрібно (наприклад, просто робити :join-pane -s 1). Можливо, це була помилка в попередніх версіях
villapx

38

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

break-pane -t :

Я зрозумів це через експерименти, але це, здається, працює дуже добре. Ви можете легко нав'язати клавіатуру або псевдонім, не вимагаючи сценаріїв.


2
+1. Я, як правило, використовую це набагато частіше, ніж join-pane.
Кріс Б

14

Якщо ви не хочете вводити ідентифікатор панелі в підказку, ви також можете використовувати

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

яка приєднає останню активну панель / вікно до поточного вікна.


1
Яку версію ви використовуєте? Я отримую unknown command: join-pane -s !з 1.6.
парадироїд

Використання 2.0 тут, але просто введення рядка в конф без лапок, здається, працює добре. bind-key j join-pane -s !
bkzland

13

Переглянувши інші відповіді та ознайомившись із сторінкою tmux man, я зараз зупинився на наступних вкладках:

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

Це дозволить вам інтерактивно вибирати вікно, яке потрібно приєднати, і відображати мої малі літери s/ vприв’язки, щоб створити нові вертикальні / горизонтальні розколи. Якщо хтось знає, як вибрати окремі панелі замість Windows, дайте мені знати.


Це дуже корисно. Дякую. На жаль, -vі -hне створюють вертикальні та горизонтальні "розколи" відповідно. Вони створюють відповідно вертикальні та горизонтальні « складені панелі ». (Це означає, що вертикально складені панелі мають горизонтальний розкол.) Отже, ви повинні тренувати свій мозок таким чином. Крім того, -vце за замовчуванням, так що я б залишив це, і лише поклав -hтуди, щоб ваші ~/.tmux.confвиступи як шпаргалка для вас, щоб подивитися.
Бруно Броноський

Мені це подобається більше, ніж інші відповіді за "навпроти зламу". Тимчасово зламавши вікно у власне вікно, пізніше я хочу повернути його до одного зі старих вікон і це витончено обробляє.
Stabledog

13

Ключова прив'язка

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

Де Ctrl+ b- префікс за за .

Деталі

tmuxКоманда ця клавіша виконує це break-pane(псевдонім: breakp) як це реалізовано в cmd-break-pane.cі зв'язала за замовчуванням в замкову bindings.c , як показано в list-keys(псевдонім: lsk) виведення команди:

bind-key    -T prefix       !                 break-pane

4

Вам не доведеться змінювати свої ключові прив’язки.

У той час як панель, яку ви хочете перемістити, має фокус, введіть префікс, а :join-pane -t :1там, де 1є номер вікна призначення в одному сеансі. Ви можете перенести його на інший сеанс, попередньо додавши його ім’я, як project:3. Для мене join-paneвкладка-автокомплекти від j.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.