привязать префикс tmux к ключу OS X cmd (или любой другой привязке)

21

Я привык к iTerm2 (или Terminal.app для этого случая) на OS X. Но я хочу перейти на использование tmux (или screen, но проблема похожа на оба приложения).

Поэтому моя идея состоит в том, чтобы иметь одну вкладку iTerm с сеансом tmux, открытым с несколькими вкладками. Для перехода у меня есть базовая функция, которую мне нужно настроить на tmux: переключите вкладку 'n' с помощью cmd + n (например, Firefox, Chrome, сам iTerm2 и т. Д.)

Однако я не могу найти способ сопоставления клавиши cmd на клавиатуре Mac. Сначала я попытался реализовать cmd в качестве префиксного ключа, но безуспешно. Я пытался установить

set-option -g prefix M-a (hoping for Meta-a)

set-option -g prefix ^a (hoping for ^ to work)

но ничего не работает. Это возможно? Мне не нужно привязывать префикс к cmd, но я хочу иметь возможность изменять вкладки tmux с помощью cmd + n.

Спасибо

rubenfonseca
источник
1
karabiner-elements имеет специальную привязку для tmux pqrs.org/osx/karabiner/complex_modifications/#modifier-keys
Фабрицио Бертольо

Ответы:

8

Вы хотите вызвать последовательность нажатий клавиш (сначала Ctrl-b, затем n в диапазоне от 0 до 9).

Лучше всего использовать такую ​​комбинацию клавиш, как Butler или Keyboard Maestro, чтобы сделать это для вас.


Используя Батлера :

Выберите + »Смарт-пункт» Клавиши , настройте горячую клавишу Cmd-1 . Нажмите Ctrl-B, затем 1для нажатия клавиш . Настройте его так, чтобы он действовал только в Терминале (или iTerm). Он предупредит вас, что другим приложениям это может не понравиться, но вы уже это знаете.


Использование клавиатуры Maestro :

Создайте новую группу слева, которая доступна только в Терминале (или iTerm).

Добавьте новый элемент, который запускается с помощью горячих клавиш триггера ( Cmd-1), и добавьте два нажатия клавиш для его действий: Ctrl-Bи 1.


Вы могли бы также хотеть взглянуть на эту тему - не использует, Commandхотя, и не работал для меня, используя Терминал.


Из документации по tmux :

Привязать ключ к команде. Ключи могут быть указаны с префиксом «C-» или «ˆ» для клавиш ctrl или «M-» для клавиш alt (meta). Флаг -r указывает, что этот ключ может повторяться, см. Параметр repeat-time.

Они не поддерживают третий ключ-модификатор.

Даниэль Бек
источник
Боже мой, какой классный хак! это тоже работает! использовал Keyboard Maestro, потому что Батлер кажется излишним. Спасибо!
rubenfonseca
Клавиатура Maestro прекрасно работает для этого
Сэм Селикофф
19

В iTerm2 вы можете сопоставить ярлыки с шестнадцатеричными кодами, которые отправляются в терминал. Перейти к настройкам iTerm2 -> Ключи. В глобальных сочетаниях клавиш нажмите + и добавьте желаемый ярлык, например, cmd + 1, который будет записан. Затем выберите «Отправить шестнадцатеричный код». В появившемся поле введите шестнадцатеричные коды, которые вы хотите отправить в tmux, разделенные пробелами. Ctrl-B равен 0x02, поэтому для «Ctrl-B 1» введите «0x02 0x31». Смотрите здесь для получения дополнительных шестнадцатеричных кодов: http://www.nthelp.com/ascii.htm

Я сопоставил Cmd с h, j, k, l для перемещения между панелями tmux, а Cmd с% и "для создания разбиений. Вероятно, я сделаю нечто подобное для перемещения между разделениями vim одним управляющим ключом.

sesotek
источник
Это определенно лучший ответ для тех, кто использует iTerm2. Благодарность!
newUserNameHere
1
По некоторым причинам, это не работает на моей сборке iTerm2 3.0.2
jasonszhao
Если это не работает, это может быть потому, что iTerm2 по умолчанию привязывает клавишу cmd к switch-tab. Ваш модификатор может конфликтовать. Мне пришлось изменить клавишу Swith Tab на вариант, чтобы заставить это работать на CMD + n
Surfrdan
2

Специальные ярлыки могут быть сделаны с Terminal.app. Я только что узнал на днях, но это, возможно, было возможно до льва.

Зайдите в «Настройки»> «Настройки» и перейдите на вкладку «Клавиатура». Теперь вам нужно добавить новое сочетание клавиш, нажав на значок плюса под полем. Теперь вы хотите установить комбинацию клавиш «Отправляет строку в оболочку».

Пример: допустим, я хочу установить M-LeftArrow для отображения prefix-p(предыдущее окно).

Key: Left Arrow 
Modifier: Option 
Action: send string to shell

Теперь просто введите в prefix-pполе ввода, где prefixнаходится то, что вы установили для tmux (я использую cntrl-a, чтобы окно отображалось \001p). Обратите внимание, что если вы допустили ошибку, вместо фактического удаления будут вставлены удаляемые символы, поэтому нажмите кнопку «Удалить один символ», чтобы переместиться назад, если у вас возникнет ошибка.

Специальные символы, которые я установил, чтобы облегчить жизнь:

M-Left  > Previous Window
M-Right > Next Window
M-Up    > Enter scrolling mode
M-Down  > Next Pane

Вы также можете изменить cntrl-что-нибудь и shift-что-нибудь, но помните, что это может помешать вашему $ EDITOR или другим программам, поэтому будьте осторожны с тем, какие специальные функции могут оказаться бесполезными.

Также обратите внимание, что я не мог понять, как дублировать эту функцию в iTerm2.

scicalculator
источник
1

Вы также можете рассмотреть встроенную (но очень экспериментальную) интеграцию, которую iTerm2 предлагает с tmux: http://code.google.com/p/iterm2/wiki/TmuxIntegration

Таким образом, когда вы нажимаете Cmd-D, чтобы разделить экран, iTerm2 разделит вкладку для вас. Это здорово, потому что разделение является родным, поэтому вы можете перетащить край в середине, чтобы заново отрегулировать ширину, или вы можете выбрать панель, нажав. То же самое для новых вкладок / окон (но ярлыки немного отличаются - иначе у вас не было бы возможности добавлять вкладки не-tmux).

Как и в случае с tmux, если вы отсоедините и снова подключите, все будет сохранено для вас.

Однако есть два предостережения: * это очень экспериментальная функция, и для меня это очень странно. * вам придется собрать tmux самостоятельно (используя архив где-то по ссылке выше).

-Крис

Крис
источник
Я знаю, что прошло два года, но есть идеи, если это все еще работает? Я следовал инструкциям по вашей ссылке, но cmd+Dразделяет панели iTerm2, а не tmux.
Сэм Селикофф
1
@SamSelikoff Вы должны начать это с tmux -CC.
jasonszhao
0

Вы также можете посмотреть этот пост в блоге с подробными пояснениями по интеграции tmux / iterm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/

Жереми
источник
2
Веб-страницы исчезают и постоянно перемещаются. Пожалуйста, по крайней мере, суммируйте содержание поста в блоге и предоставьте детали его заголовка и автора, чтобы ваш ответ не стал полностью бесполезным, если ссылка не работает.
Дэвид Ричерби