Як обмінятися панелями всередині вікна в tmux, як на екрані?


41

Я думав, що переміщення панелі tmux до вікна - це те саме питання, але, здається, це не так.

Починаючи з регулярного використання екрана GNU, я шукаю tmux для того ж, щоб робити те саме. Щодо речей, які я роблю регулярно, - це відкрити пару різних вікон, одне з деяким кодом, відкритим у vim, і пару вікон терміналів, відкритих для перевірки коду, а іноді вікно чи два для різних інших речей. Я розділяю екран вертикально і часто матиму вікно vim у верхній частині, а потім одне з інших вікон у нижній області.

Основні команди Потім я використовую є Ctrla, Tabщоб обертати між стеклами і Ctrla, nщоб обертати між вікнами всередині панелі. Наприклад, з vim на верхній панелі я перемикаюся на нижню панель і потім обертаюсь через інші термінали, роблячи все, що мені потрібно. Екран залишається розділеним весь час.

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

Пропозиції (окрім того, що просто наклеювати на екран)?


Ваша термінологія трохи заплутана. У tmuxвікні можна розділити на кілька панелей. Ви намагаєтеся обертатися між панелями у вікні із в'язкою клавіш?
Jasonwryan

Я намагався дотримуватися номенклатури інструментів, але визнаю, це заплутано. Я знаю, як змінити фокус від однієї області до іншої. Що я намагаюся з’ясувати, це як циклічно відображатись на певній панелі, не змінюючи компонування інакше.
FooBar

Отже, щоб перемістити вміст з однієї області на іншу? Шукаєте swap-pane? Якщо ви шукаєте емуляцію екрана Ctrl-a n, то еквівалент tmux є Ctrl-b n.
Jasonwryan

Відповіді:


28

tmux і екран мають різні моделі, тому точного еквівалента немає.

За умовами екрана , розділення дозволяє відображати кілька вікон одночасно. next( C-a n) обертає вікна через активну частину розколу; це дозволяє обертати «приховані» вікна через активну область розколу.

У терміні tmux розкол розділяє вікно на одну або кілька панелей. Кожна частина розділеного вікна - це індивідуальна панель, панелі ніколи не приховуються (якщо вибрано вікно (видно), всі його панелі теж є), і панель може використовуватися лише в одному розділі одного вікна (панель може не бути в декількох вікнах, і не може бути в декількох розділах одного і того ж вікна). Є команди для переміщення панелей навколо в (або між) вікнами, але не ідентичним чином , щоб nextв екрані .


Ви можете використати прив'язку на зразок наступної, щоб влаштувати подібний ефект:

bind-key C-n swap-pane -s :+.top \; rotate-window -Ut :+

Ви, ймовірно, захочете помістити це у свій ~/.tmux.confфайл, але ви можете просто ввести / вставити після, Prefix :щоб прив'язати його до вашого поточного екземпляра сервера.

Щоб скористатися прив'язкою, виберіть "головне вікно", розділіть його, створіть вікно "контейнер панелі" відразу після "головного вікна", а потім використовуйте прив'язку для обертання будь-якої області в "головному вікні" серед групи в розділі " вікно контейнера ".

Ось як можна створити налаштування:

  • Виберіть вікно, яке використовуватимете як ваше "головне вікно". Початок (наприклад) Vim у ньому.

  • Розділіть своє «головне вікно» на дві області.

    Наприклад Prefix "( :split-window)

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

  • Створіть нове вікно ("контейнер панелі") відразу після головного вікна.

    Наприклад Prefix c( :new-window)

    Важливо, щоб жодне інше вікно не потрапляло між індексами "головного вікна" та "вікна контейнера панелі" ( +у специфікаціях вікна, які використовуються у зв'язаних командах, означає "наступне вікно з більшим числом").

  • Розділити це вікно на декілька вікон. Щоб обертатись через три панелі, розділіть це вікно на дві панелі (третя панель - це "головне вікно").

    Можливо, вам потрібна оболонка для git та оболонка для роботи інтерфейсу бази даних. Помістіть кожного в окрему панель у цьому вікні "контейнер для панелей".

  • Поверніться до свого «головного вікна». Виберіть область, яку ви хочете "обернути".

    Ви можете використовувати Prefix Up/ Down/ Left/ Rightдля переміщення між панелями.

  • Викликайте прив'язку для заміни поточної панелі першою панеллю у вікні "контейнер панелі" та ("поза кадром") обертання панелей всередині вікна "контейнер панелі" (так що наступного разу, коли ви запустите прив'язку, перша команда поміняється на "наступну" панель у послідовності).

    Prefix Control- n(обов'язкове використання Cn, але ви можете змінити це на все, що завгодно).

  • Щоб прокрутити панелі назад, ви можете скористатись нижче:

клавіша підключення Cp своп-панелі -s: +. дно \; rotate-window -Dt: +

Дякую! Чудове пояснення, і запропоновані вами обов'язкові прив'язки здаються, щонайменше, повторюють функціонал, який я шукав.
FooBar

Вибачте, як можна одна панель повного розміру, а потім поміняти назад до попередньої домовленості
MageProspero

1
@JamesAndino: tmux 1.8 має resize-pane -Z(за замовчуванням прив’язаний до префікса + z), який тимчасово "збільшує" область на повний розмір вікна. Для версії до 1.8 не було вбудованого способу зробити це; інші розробили сценарії рішення з інших вбудованих команд (наприклад, деякі відповіді на питання SU "Максимізація" області в tmux ).
Кріс Джонсен

ty, складено та завантажено
MageProspero

3
Я вважаю, що C-b oвікна циклів.
Сем Селікофф

39

Я вважаю , що ви шукаєте Ctrlb+ ( , , , ). Це дозволить вам пересуватися між панелями.


2
Вибачте, але мені було не дуже ясно. Я зрозумів, як переходити з панелі на панель. У tmux Ctrl b + o функціонує приблизно так само, як Ctrl a + Tab на екрані. Що я шукаю - це еквівалентна функціональність, як Ctrl a + n екрану.
FooBar

@FooBar як щодо Ctrl-b+{чи Ctrl-b+}? Це приблизно так близько, як я можу знайти цю функціональність. Панель не робиться так само, як у tmux, як з ними обробляється на екрані.
sparticvs

У мене часто виникають проблеми з фокусуванням виділеної панелі, мовляв, у мене дві області, я часто натискаю ^b↑. Як я тоді насправді фокусую виділену панель таким чином, що інша буде захоплена оболонкою, а не tmux?
ThorSummoner

6

використання bind -r, тож ви можете натиснути prefixодин раз, потім інші клавіші в послідовності, щоб знайти панель. Час очікування може бути відрегульований на repeat-time. Перевіркаman tmux

bind -r Tab select-pane -t :.+

Якщо ви віддаєте перевагу hjkl,

bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R

2

Ось невелика конфіденція, яка дозволяє переходити до інших панелей або вікон за допомогою ярликів ALT або SHIFT +. Немає необхідності використовувати префікс ключа.

## NAVIGATION: ############################

# Switch panes 
# Usage: "ALT+arrow keys" (without prefix key)
# from https://gist.github.com/spicycode
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Switch windows 
# usage: "SHIFT+arrow" (without prefix key)
bind -n S-Left  previous-window
bind -n S-Right next-window

Якщо ви лініші, ніж я, вас також може зацікавити наступний код, який дозволяє панелям навігацію мишею. (використання: ключовий префікс + m, щоб увімкнути, M для його вимкнення)

## MOUSE CONTROL: #########################
set -g mode-mouse off
set -g mouse-resize-pane off
set -g mouse-select-pane off
set -g mouse-select-window off

# Toggle mouse on 
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'

# Toggle mouse off
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'

ця конфігурація повинна працювати точно працює для tmux 1.6 до 1.9.


2

Цей відповідь дає вам дві області, де обидві області містять однаковий набір вікон, але кожна панель може перемикатися між вікнами незалежно.

Підхід tmux полягає у використанні трьох сеансів:

  • зовнішній сеанс для панелей ,
  • внутрішній сеанс для Windows (ви можете приєднати до цього з однієї області),
  • вторинний погляд на внутрішній сеанс (для іншої області).

Так, це філософія UNIX зійшла з розуму. Давайте розпочнемо:

# Create a session to hold the multiple windows
$ tmux new-session -s inner

    <Ctrl-b> c   to create a few windows, run some things

    <Ctrl-b> d   to detach, but leave it running

# Create a session to hold multiple panes (the view)
$ tmux new-session -s outer

    <Ctrl-b> "   to split

# Open the inner session in the current (bottom) pane
$ unset TMUX ; tmux attach -t inner

Тепер ви можете перейти на верхню панель і відкрити Vim як завжди. Для проїзду через вікна у внутрішньому сеансі (нижня панель) вам потрібно буде скористатися Ctrl-b Ctrl-b nі p.

У бік: Це трохи непросто, але ви завжди можете змінити префікс зовнішнього сеансу, наприклад, на Ctrl-aтакий:

<Ctrl-b> :set-option prefix C-a

Тоді просто було б Ctrl-b nі pкружляти внутрішні вікна, і Ctrl-a oкругообіг зовнішніх стекол.

Гаразд зараз, замість того, щоб відкривати Vim у верхній панелі, давайте знову підключимось до вашого внутрішнього сеансу. Закрийте vim, і цього разу скористайтеся new-sessionкомандою (особливо з -tне -s):

$ tmux new-session -t inner

Вуаля! Тепер ви можете переходити через вікна на верхній і нижній панелях.

Причина, яку ми повинні використати new-session -tвдруге, полягає в тому, що якби ми просто зробили attach -tзнову, тоді верхня і нижня панелі синхронізувалися, завжди показуючи одне і те ж вікно, що не є тим, що ти хочеш. Щоб дозволити цій області переміщатися через вікна незалежно від іншої області, ми створюємо новий сеанс "перегляду", але підключаємо його задній кінець безпосередньо до існуючого сеансу, який містить вікна. Це також відоме як " згруповані сесії ". (До речі, це посилання також пропонує використовувати [un]link-windowдля переміщення вікон між сеансами.)

Звичайно, для симетрії, ви могли б бігти і tmux new-session -t innerв нижній частині, замість цього attach. У такому випадку ви б запустили 4 екземпляри tmux (плюс ще один процес tmux для сервера)!


0

Введіть у свій код наступний код .tmux.conf:

# cycle prev/next pane
bind -n S-right select-pane -t :.+
bind -n S-left select-pane -t :.-

Перезавантажте конфігурацію, тоді ви можете натиснути (безпосередньо без префіксальної клавіші) Shift+, щоб перемістити панелі в напрямку за годинниковою стрілкою, і Shift+ для переміщення в зворотному напрямку.

Випробувано в Tmux 2.8.


Якщо ви не хочете редагувати конфігурацію, prefix+ o- це прив'язка клавіш за замовчуванням для циклу за годинниковою стрілкою. Я час від часу знаходив цю прив'язку клавіш, потім отримую команду tmux list-keysі використовую її для власних прив'язок ключів:

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