Как мне переназначить Caps Lock на Escape и Control?

22

Я обычно запускаю Linux. Я часто использую Vim, поэтому клавиша Escape чрезвычайно важна. Я также часто использую другие сочетания клавиш, так что Control также является «ключом». В Linux я решил эту проблему с помощью xcape, чтобы сопоставить клавишу блокировки Caps с Escape, если она нажата сама по себе, или Control, если нажата в сочетании с другой клавишей. Это дает лучшее из обоих миров в пределах досягаемости моего мизинца. Есть ли способ сделать это на Mac?

BenjaminRH
источник

Ответы:

19

Да , используя Карабинер (ранее KeyRemap4Macbook) .

Сначала перейдите на панель настроек клавиатуры, нажмите «Клавиши-модификаторы…» и измените Caps Lock на Control. Затем перейдите в Karabiner и найдите эту опцию:

Control_L - Control_L
      (+ когда вы набираете только Control_L, отправьте Escape)

Проверьте это, и все готово. С помощью Karabiner вы можете делать намного больше интересных вещей, например, сопоставлять свой (теперь бесполезный) Escape-ключ с Hyper-ключом с еще большим количеством комбинаций клавиш.

0942v8653
источник
возможно ли переназначить esc в caps lock и map caps lock для контроля и выхода? Потому что иногда я все еще чувствую необходимость использовать заглавные буквы для ввода длинной строки в верхнем регистре.
Аарон Шен
Теперь Karibiner говорит вам изменить Caps Lock на «No Action» в настройках OSX Keyboard (вместо того, чтобы установить его там на Control) и использовать Seil, родственную программу Karabiner, для переназначения. Последняя часть ответа выше (+ когда вы набираете только Control_L ...) по-прежнему выполняется в Karabiner.
ScoBe
@AaronShen просто переназначить escape для блокировки шапки ;-).
Ven
@ScoBe Я бы рекомендовал не делать этого, тебе действительно не нужен Сеил,
Ven
Я рекомендую уменьшить значение параметра « Наложение ключей в Карабинере»> «Время ожидания» с 1000 до 200 мс . Если я держу ключ, но потом передумал и отпустил его, я не хочу запускать Escape.
Joeytwiddle
16

Карабинер в настоящее время несовместим с MacOS Sierra. Другое, дружественное к Сьерре решение - это Keyboard Maestro (это не бесплатно). Измените поведение клавиши Caps-Lock на Control через System Preferences-> Keyboard->, Modifier Keysкак предлагали другие.

Затем в Keyboard Maestro установите макрос следующим образом:

  • Вызваны USB Device Key Trigger
  • Нажмите клавишу Caps-Lock на клавиатуре
  • прослушивается один раз
  • с этими модификаторами: ^
  • (вам нужно будет повторить предыдущий триггер для каждой USB-клавиатуры, которую вы используете)
  • Затем добавьте действие Text->Type a keystroke
  • Нажмите Esc
grokfully
источник
1
Просто чтобы прояснить, есть проект под названием Karabiner Elements , который работает на Sierra (который является предшественником версии Karabiner, которая будет работать на Sierra). Я не пробовал, поэтому не знаю, доступна эта функция или нет.
Tubedogg
5
Karabiner-Elements пока не поддерживает действие по нажатию клавиши-модификатора, которое потребуется для этого.
ворчливо
Эта опция «с этими модификаторами: ^» требует ^только нажатия вместе с колпачком для запуска действия. Это совсем не то, что требуется в вопросе.
defhlt
Так как мы сначала изменили Caps-Lock, чтобы он вел себя как Контроль через Системные настройки, KM видит событие USB с нажатой клавишей Control. Если вы опустите ^модификатор, действие никогда не сработает.
ворчливо
Если вы идете по маршруту клавиатурного маэстро, есть ли способ сопоставить управляющую клавишу с блокировкой заглавных букв, чтобы восстановить функциональность блокировки заглавных букв? Я люблю иметь заглавные буквы как Ctrl и бежать, хотя.
Квас
1

Чтобы сделать это с Karabiner Elements , который поддерживает macOS 10.12 и более поздние ~/.config/karabiner/karabiner.jsonверсии , откройте и добавьте следующее правило в rulesмассив.

{
  manipulators: [
    {
      description:
        "Change caps_lock to control when used as modifier, escape when used alone",
      from: {
        key_code: "caps_lock",
        modifiers: {
          optional: ["any"]
        }
      },
      to: [
        {
          key_code: "left_control"
        }
      ],
      to_if_alone: [
        {
          key_code: "escape",
          modifiers: {
            optional: ["any"]
          }
        }
      ],
      type: "basic"
    }
  ]
}

Вы также можете попробовать использовать ControlEscape.spoon с Hammerspoon .

Дэнни Го
источник
Я не мог заставить это работать, если я не удалил модификаторы (ключевое слово и все) в to_if_aloneразделе. Но спасибо за фрагмент. Это супер полезно.
Майкл