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

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

Ответы (3)

Да , с помощью Karabiner (ранее KeyRemap4Macbook) .

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

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

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

возможно ли переназначить esc на Caps Lock и переназначить Caps Lock для управления и побега? Потому что иногда я все еще чувствую необходимость использовать заглавные буквы для ввода длинной строки в верхнем регистре.
Karibiner теперь предлагает вам изменить Caps Lock на «No Action» в настройках клавиатуры OSX (вместо того, чтобы установить его там на Control) и использовать Seil, дочернюю программу Karabiner, для переназначения. Последняя часть приведенного выше ответа (+ только при вводе Control_L...) по-прежнему выполняется в Karabiner.
@AaronShen просто переназначит escape на Caps Lock ;-).
@ScoBe Я бы не рекомендовал этого делать, тебе действительно не нужен Сейл,
Я рекомендую уменьшить параметр Key Overlaid Modifier > Timeout в Karabiner с 1000 мс до 200 мс . Если я держу клавишу, но затем передумаю и отпущу ее, я не хочу запускать Escape.

Karabiner в настоящее время несовместим с MacOS Sierra. Еще одно решение для 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
Просто для ясности: существует проект под названием Karabiner Elements , который работает на Sierra (который является предшественником версии Karabiner, которая будет работать на Sierra). Я не пробовал, поэтому не знаю, доступна ли эта функция или нет.
Karabiner-Elements пока не поддерживает действие по нажатию клавиши-модификатора, которое было бы необходимо для этого.
Эта опция «с этими модификаторами: ^» требует ^нажатия только вместе с капслоком, чтобы вызвать действие. Это совсем не то, что требуется в вопросе.
Поскольку мы сначала меняем Caps-Lock, чтобы он вел себя как «Управление через Системные настройки», KM видит событие USB с нажатой клавишей Control. Если вы опустите ^модификатор, действие никогда не сработает.
Если вы пойдете по пути маэстро клавиатуры, есть ли способ сопоставить клавишу выхода с заглавными буквами, чтобы восстановить функциональность заглавных букв? Мне нравится, когда заглавные буквы блокируются как Ctrl, так и Escape.
Похоже, что в версии 12 это поддерживается на github.com/tekezo/Karabiner-Elements/issues/18 , который указывает на pqrs.org/osx/karabiner/complex_modifications/#caps_lock. Обратите внимание, что вам нужно загрузить файл json - сначала меня это немного смутило, также один из вариантов только с 12.02

Чтобы сделать это с помощью 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разделе. Но спасибо за фрагмент. Это супер полезно.