Изменение размера панели не работает для tmux на Mac?

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

После поиска я обнаружил, что ctrl+b (PREFIX), а затем ctrl+стрелка должны изменять размер текущей панели. Но это не работает. Может быть, я что-то упускаю?

Спасибо.

Вероятно, ваш терминал не отправляет (отличающуюся) последовательность при удержании Control и нажатии стрелки.

Попробуйте запустить cat и ввести в него клавиши (выход – Control-C). Вы, наверное, обнаружите, что (например) Вверх и ControlВверх генерируют одну и ту же последовательность.

Приложение Terminal в OS X

По умолчанию приложение Terminal в OS X отправляет последовательность ^[[A (или ^[OA), независимо от того, нажимаете ли вы Вверх или ControlВверх (также и для любой комбинации с Shift и Option).

Тем не менее, вы можете перенастроить Terminal, чтобы он отправлял соответствующие коды. Это немного утомительно, но обычно это нужно делать лишь один раз.

  1. Terminal > Preferences…
  2. вкладка Settings верхнего уровня
  3. выберите профиль, который хотите изменить
  4. вкладка Keyboard
  5. нажмите кнопку плюс, чтобы добавить новое привязку

    • выберите клавишу курсора
    • установите модификатор на control
    • используйте действие Send Text:
    • введите Escape (будет отображаться как \033), затем [1;5 и еще один символ:
      • A для Вверх,
      • B для Вниз,
      • C для Вправо, или
      • D для Влево
    • нажмите OK для добавления привязки

Например, окончательная последовательность для ControlВверх должна выглядеть как \033[1;5A.

Эти последовательности генерируются XTerm (см. документацию ctlseqs для подробностей).

Повторите последний шаг для остальных стрелок.

iTerm 2

По умолчанию iTerm 2 отправляет ожидаемую последовательность.

Вы можете использовать мета-клавишу вместо контрольной клавиши в комбинациях ctrl-↑ и ctrl-↓. В OSX Terminal мета-клавишей по умолчанию является клавиша Escape. Например, чтобы увеличить размер панели, введите ctrl-b esc-↑.

Я считаю клавишу Escape неудобной для нажатия, поэтому использую клавишу Option в качестве мета-клавиши. В Terminal.app вы можете изменить это, перейдя в Terminal > Preferences > Profiles > Keyboard: отметьте “Use Option as Meta Key”.

Теперь вы можете вводить ctrl-b option-↑, чтобы увеличить размер, или ctrl-b option-↓, чтобы уменьшить размер, и вам не нужно перепривязывать клавиши управления миссией.

По умолчанию Mac OS имеет горячие клавиши Mission Control, привязанные к ctrl+стрелки, и они имеют приоритет над управлением Tmux. Я все равно не использую эти горячие клавиши на Mac, поэтому просто выключил их в настройках клавиатуры, и теперь управление Tmux работает как ожидалось:

горячие клавиши

По крайней мере в Mavericks и iTerm2, вы должны удерживать Control, затем нажать b (вместо удержания), затем удерживать кнопку направления. Это отправляет почти такие же последовательности, как удержание Controlb с кнопкой направления, так что это работает.

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

Откройте файл tmux.conf и отредактируйте его с помощью vi:

vi ~/.tmux.conf

Вставьте эти строки:

set -g mouse on
set -g mouse-select-window on
set -g mouse-select-pane on
set -g mouse-resize-pane on

Нажмите “Esc” и “ZZ”, чтобы сохранить изменения.

Теперь вы можете изменять размер панелей с помощью мыши.

Я добавил следующие привязки клавиш в ~/.tmux.conf, чтобы изменять размер с помощью Ctrl + hjkl:

bind -n C-k resize-pane -U 5
bind -n C-j resize-pane -D 5
bind -n C-h resize-pane -L 5
bind -n C-l resize-pane -R 5

Затем выполните tmux source-file ~/.tmux.conf, чтобы перезагрузить конфигурацию.

Недавно я столкнулся с этой проблемой в iTerm2. Хотя в топовом ответе упоминается, что “iTerm2 отправляет ожидаемую последовательность по умолчанию”, эта информация может быть устаревшей.

Решение очень похоже на ответ Криса Джонсона для приложения Terminal.

  1. Откройте iTerm2 и перейдите в Settings > Profiles > Keys > Key Mappings.
настройки привязок клавиш
  1. Нажмите значок плюс + рядом с Presets. Для Keyboard Shortcut введите контрольную последовательность, которую хотите привязать, например ctrl + up. Для Action выберите Send Escape Sequence и введите [1;5A. Нажмите OK.
отправка escape-последовательности
  1. Повторите этот процесс для остальных направлений:
Привязка клавиш Escape-последовательность
ctrl + вверх [1;5A
ctrl + вниз [1;5B
ctrl + вправо [1;5C
ctrl + влево [1;5D

Проверьте и подтвердите ваши привязки в консольном окне, используя cat и вводя комбинацию, например ctrl + вверх:

$ cat
^[[1;5A^[[1;5B^[[1;5C^[[1;5D

.

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

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

Теория

Tmux — популярный мультиплексор терминала, который позволяет управлять несколькими сессиями терминала внутри одного окна. Одной из его мощных функций является возможность изменять размер панелей с помощью сочетания клавиш. По умолчанию для этого используются Ctrl + b как префиксная команда, затем Ctrl + стрелка для изменения размеров.

Основная проблема, с которой сталкиваются пользователи macOS, заключается в том, что некоторые терминальные эмуляторы и операционная система могут некорректно обрабатывать сочетания клавиш Ctrl + стрелка, связывая их с другими функциями, такими как управление "Миссион Контролем".

Пример

Рассмотрим несколько сценариев, которые могут вызвать такую проблему:

  1. Терминал не отправляет уникальные последовательности: Некоторые терминальные программы не различают нажатия стрелок с контролами от обычных стрелок. Это можно проверить, используя команду cat и вводя клавиши в терминале (завершив с помощью Ctrl + C), чтобы увидеть, отправляют ли они уникальные последовательности.

  2. Конфликт с системными сочетаниями клавиш: macOS устанавливает свои собственные сочетания клавиш Ctrl + стрелки для навигации по рабочим столам, которые могут конфликтовать с конфигурацией tmux.

Применение

Теперь рассмотрим шаги по решению этой проблемы в разных условиях.

Изменение конфигурации в macOS Terminal:

  1. Откройте Терминал и перейдите в Настройки.
  2. Выберите профиль, который вы используете, и перейдите на вкладку Клавиатура.
  3. Добавьте новое сочетание клавиш, используя клавишу со стрелкой и модификатор контрол.
  4. Задайте для действия Отправка текста и введите соответствующую последовательность escape. Например, для Ctrl + Вверх это будет \033[1;5A.

Использование iTerm2:

iTerm2 изначально стандартно отправляет необходимые последовательности, но если это не так:

  1. Откройте iTerm2, перейдите в Настройки > Профили > Клавиши.
  2. Добавьте новое сопоставление клавиш, выбрав Ctrl + стрелка, и введите соответствующую escape-последовательность ([1;5A для Ctrl + Вверх и т.д.).

Настройка в ~/.tmux.conf:

Если вы предпочитаете полностью обойтись без сложных конфигураций терминала, вы можете изменить настройки tmux напрямую:

  1. Откройте файл конфигурации tmux:
    vi ~/.tmux.conf
  2. Добавьте альтернативные команды для управления размерами панелей:
    bind -n C-k resize-pane -U 5
    bind -n C-j resize-pane -D 5
    bind -n C-h resize-pane -L 5
    bind -n C-l resize-pane -R 5
  3. Примените изменения, перезагрузив конфигурацию tmux:
    tmux source-file ~/.tmux.conf

Изменение системных настроек macOS:

Отключите системные клавиши для управления Mission Control и других функций, которые могут конфликтовать с комбинациями Ctrl + стрелки:

  1. Перейдите в Системные настройки > Клавиатура > Ярлыки.
  2. Отключите все ненужные сочетания клавиш или переназначьте их.

Заключение

Используя приведенные выше подходы, вы можете решить проблему с изменением размера панелей в tmux на macOS, которая связана с неправильной обработкой комбинаций клавиш Ctrl + стрелки. Каждый из способов нацелен на предоставление гибкости пользователям, учитывая их предпочтения и используемые инструменты. Настройка tmux и терминальных эмуляторов для правильной отправки escape-последовательностей требует терпения, но один раз сделав эти изменения, вы получите рабочую конфигурацию, которая облегчит вашу повседневную работу с tmux.

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

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