Як надсилати команди при відкритті сесії tmux всередині іншого сеансу tmux?


136

Типовою ситуацією може бути:

$ tmux
  [0] $ ssh example.com
      $ tmux attach
        [0] $ 

Я відкриваю сесію tmux, потім входжу в сервер і приєднуються до існуючого сеансу tmux. На даний момент у мене один сеанс tmux всередині іншого. Як мені надсилати команди до внутрішнього сеансу tmux?

Примітка: Обидва сеанси tmux мають однакові прив'язки клавіш.


4
не питання програмування. Спробуйте спробувати superuser.com . Удачі.
снаряд

1
Я радий попросити перенести це питання, однак для контексту я використовую vim всередині tmux для кодування, і, звичайно, часто доводиться переходити на інші сервери, де саме ця проблема виникає.
Кріс

Відповіді:


207

send-prefixКоманда може бути використана для відправки префікса натискання клавіші (процес обкатки) активна панелі. За замовчуванням префікс є Cb і Cb прив’язаний send-prefix(так, що натискання на нього двічі посилає один Cb на активну панель). Це саме те, що нам потрібно для доступу до прив’язок внутрішнього примірника tmux .

Перший Cb фіксується "зовнішнім" екземпляром tmux як його префіксний ключ. Другий фіксується «зовнішнім» екземпляром tmux і запускає його Cb прив'язку ( send-prefix). Це посилає Cb на активну панель зовнішнього екземпляра. Процес, що працює на цій панелі, є (в кінцевому рахунку, через ssh екземпляр) "внутрішнім" екземпляром tmux . Він фіксує Cb як його префіксний ключ. Тепер ваш наступний натискання клавіші буде переданий через зовнішній екземпляр tmux і захоплений внутрішнім, щоб викликати прив'язку.

Щоб запустити зв'язування c ( new-window) в екземплярі tmux другого рівня , слід ввести Cb Cb c . Для екземпляра tmux третього рівня ви ввели Cb Cb Cb Cb c .

Це подвоєння для кожного рівня може дратувати, якщо ви зазвичай маєте справу з декількома шарами tmux . Якщо ви можете зберегти якийсь інший ключ, ви можете зробити нефіксовану прив'язку, щоб полегшити введення речей:

bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix

Створіть нове вікно в tmux другого рівня : C- \ c
Створіть нове вікно в tmux третього рівня : C- ^ c (або C- \ C- \ c )


Якщо у вас є обмежена кількість команд tmux, які ви хочете (легко) надсилати екземплярам tmux нижнього рівня , ви можете замість цього send-keysстворити певні прив'язки (можливо, лише у вашому екземплярі tmux верхнього рівня ):

bind-key C-c  send-keys C-b c
bind-key C    send-keys C-b C-b c

Створення нового вікна в tmux другого рівня : Cb Cc
Створення нового вікна в tmux третього рівня : Cb C


Крім того , я повинен був закомментировать мою існуючу last-windowсилу , як це називалося , коли робити C-a C-a, як такої: #bind-key C-a last-window. Зауважте, мій префікс - aне за замовчуванням b.
Кріс

1
bind-key -n C-\ send-prefixне працює. Мій tmux не розпізнає \. Коли я використовую лист, він працює.
темний

@Darksky: Яку версію tmux ви використовуєте? Для мене це працює з 1,7, 1,6 та 1,5. Вам обов'язково потрібно буде додати додатковий рівень цитування, якщо ви робите прив'язку з команди оболонки (тобто tmux bind-key -n 'C-\' send-prefix); якщо у вас виникають проблеми з його роботою з ~/.tmux.conf(або :командного рядка Префікса ), ви можете спробувати подібне цитування (тобто bind-key -n 'C-\' send-prefix).
Кріс Джонсен

51

Щоб отримати доступ до внутрішньої, утримуйте клавішу управління та натисніть кнопку B двічі.


7

Редагувати:

Я НЕ рекомендую використовувати C-qяк прив'язуючий ключ, оскільки це команда клавіш управління за замовчуванням для

знімає екран і дозволяє продовжувати показ екрана

Ситуація відбувається тут , і @Paschalis забезпечує рішення:

якщо це трапляється вдвічі невдало (віддалений сеанс tmux з префіксом Cq): введіть Cltr-q, а потім :введіть у tmux:send-keys C-q

Нижче відповідь:


Щоб зробити це просто, додайте нижченаведений рядок у своєму ~/.tmux.conf

bind-key -n C-q send-prefix

Тоді ви можете безпосередньо використовувати C-qяк прив'язку для віддаленого tmux.


якщо хтось змінив ключ зв’язування за замовчуванням у зовнішньому tmux, тоді він повинен використовувати той самий ключ зв’язування за замовчуванням у внутрішньому tmux, щоб вищевказаний фрагмент працював!
Пашаліс

я модифікування префікса моєї локальної tmux (до Ctrl +] в моєму випадку) , так що все «внутрішній» tmux-ес на серверах має по замовчуванням прив'язки для префікса
бездіяльного
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.