Вопрос или проблема
После поиска я обнаружил, что ctrl+b (PREFIX), а затем ctrl+стрелка должны изменять размер текущей панели. Но это не работает. Может быть, я что-то упускаю?
Спасибо.
Вероятно, ваш терминал не отправляет (отличающуюся) последовательность при удержании Control и нажатии стрелки.
Попробуйте запустить cat
и ввести в него клавиши (выход – Control-C). Вы, наверное, обнаружите, что (например) Вверх и Control–Вверх генерируют одну и ту же последовательность.
Приложение Terminal в OS X
По умолчанию приложение Terminal в OS X отправляет последовательность ^[[A
(или ^[OA
), независимо от того, нажимаете ли вы Вверх или Control–Вверх (также и для любой комбинации с Shift и Option).
Тем не менее, вы можете перенастроить Terminal, чтобы он отправлял соответствующие коды. Это немного утомительно, но обычно это нужно делать лишь один раз.
- Terminal > Preferences…
- вкладка Settings верхнего уровня
- выберите профиль, который хотите изменить
- вкладка Keyboard
-
нажмите кнопку плюс, чтобы добавить новое привязку
- выберите клавишу курсора
- установите модификатор на
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
(вместо удержания), затем удерживать кнопку направления. Это отправляет почти такие же последовательности, как удержание Control
–b
с кнопкой направления, так что это работает.
Также убедитесь, что вы зашли в настройки клавиатуры и на вкладке горячих клавиш отключили любые горячие клавиши, которые могут быть у вас для 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.
- Откройте iTerm2 и перейдите в Settings > Profiles > Keys > Key Mappings.
- Нажмите значок плюс + рядом с Presets. Для Keyboard Shortcut введите контрольную последовательность, которую хотите привязать, например ctrl + up. Для Action выберите Send Escape Sequence и введите
[1;5A
. Нажмите OK.
- Повторите этот процесс для остальных направлений:
Привязка клавиш | 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 + стрелка
, связывая их с другими функциями, такими как управление "Миссион Контролем".
Пример
Рассмотрим несколько сценариев, которые могут вызвать такую проблему:
-
Терминал не отправляет уникальные последовательности: Некоторые терминальные программы не различают нажатия стрелок с контролами от обычных стрелок. Это можно проверить, используя команду
cat
и вводя клавиши в терминале (завершив с помощьюCtrl + C
), чтобы увидеть, отправляют ли они уникальные последовательности. -
Конфликт с системными сочетаниями клавиш: macOS устанавливает свои собственные сочетания клавиш
Ctrl + стрелки
для навигации по рабочим столам, которые могут конфликтовать с конфигурациейtmux
.
Применение
Теперь рассмотрим шаги по решению этой проблемы в разных условиях.
Изменение конфигурации в macOS Terminal:
- Откройте
Терминал
и перейдите вНастройки
. - Выберите профиль, который вы используете, и перейдите на вкладку
Клавиатура
. - Добавьте новое сочетание клавиш, используя клавишу со стрелкой и модификатор
контрол
. - Задайте для действия
Отправка текста
и введите соответствующую последовательность escape. Например, дляCtrl + Вверх
это будет\033[1;5A
.
Использование iTerm2:
iTerm2 изначально стандартно отправляет необходимые последовательности, но если это не так:
- Откройте
iTerm2
, перейдите вНастройки > Профили > Клавиши
. - Добавьте новое сопоставление клавиш, выбрав
Ctrl + стрелка
, и введите соответствующую escape-последовательность ([1;5A
дляCtrl + Вверх
и т.д.).
Настройка в ~/.tmux.conf
:
Если вы предпочитаете полностью обойтись без сложных конфигураций терминала, вы можете изменить настройки tmux
напрямую:
- Откройте файл конфигурации
tmux
:vi ~/.tmux.conf
- Добавьте альтернативные команды для управления размерами панелей:
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
:tmux source-file ~/.tmux.conf
Изменение системных настроек macOS:
Отключите системные клавиши для управления Mission Control и других функций, которые могут конфликтовать с комбинациями Ctrl + стрелки
:
- Перейдите в
Системные настройки > Клавиатура > Ярлыки
. - Отключите все ненужные сочетания клавиш или переназначьте их.
Заключение
Используя приведенные выше подходы, вы можете решить проблему с изменением размера панелей в tmux
на macOS, которая связана с неправильной обработкой комбинаций клавиш Ctrl + стрелки
. Каждый из способов нацелен на предоставление гибкости пользователям, учитывая их предпочтения и используемые инструменты. Настройка tmux
и терминальных эмуляторов для правильной отправки escape-последовательностей требует терпения, но один раз сделав эти изменения, вы получите рабочую конфигурацию, которая облегчит вашу повседневную работу с tmux
.