如何将Caps Lock重新映射到Escape和Control?


22

我通常运行Linux。我经常使用Vim,因此Escape键非常重要。我也经常使用其他键盘快捷键,因此Control也是“键”。在Linux上,我已经通过使用xcape将Caps锁定键映射到Escape(如果被其自身按下)或者将Control(如果与另一个键结合使用)进行了映射来解决此问题。这使两全其美的触手可及的小手指触手可及。在Mac上有什么方法可以做到这一点吗?

Answers:


19

是的,使用Karabiner(以前称为KeyRemap4Macbook)

首先,进入“键盘”偏好设置面板,单击“修饰键...”,然后将Caps Lock更改为Control。然后,进入Karabiner并搜索以下选项:

Control_L到Control_L
      (仅在键入Control_L时发送Escape时为+)

检查一下,您就完成了。使用Karabiner,您可以做更多有趣的事情,例如将您的(现在已经是无用的)Escape键映射到具有更多键绑定的Hyper键。


是否可以将esc重新映射为大写锁定,而将大写锁定映射为控制和转义?因为有时,我仍然觉得需要使用大写锁定来键入长的大写字符串。
亚伦·申

现在,Karibiner告诉您在OSX键盘首选项中将Caps Lock更改为“ No Action”(而不是在那里将其设置为Control),并使用Karabiner的姊妹程序Seil进行重新映射。上面答案的最后一部分(仅当您键入Control_L时为+ ...)仍在Karabiner中完成。
ScoBe

@AaronShen只需将转义重新映射到大写锁定;-)。
2015年

@ScoBe我建议您不要这样做,您真的不需要Seil,
2015年

我建议将Karabiner的“ 键叠加修改器”>“超时”参数从1000ms减少200ms。如果我握住了钥匙但是改变了主意然后放开它,我就不想开逃命。
joeytwiddle

16

Karabiner当前与MacOS Sierra不兼容。另一个对Sierra友好的解决方案是使用Keyboard Maestro(它不是免费的)。像其他人建议的那样,通过System Preferences-> Keyboard-> 将Caps-Lock键的行为更改为Control Modifier Keys

然后在Keyboard Maestro中,按如下所示设置宏:

  • 触发者 USB Device Key Trigger
  • 按键盘上的Caps-Lock键
  • 被点击一次
  • 使用这些修饰符: ^
  • (您将需要为使用的每个USB键盘重复上一个触发器)
  • 然后添加一个动作Text->Type a keystroke
  • 按Esc

1
需要明确的是,有一个名为Karabiner Elements的项目确实在Sierra上运行(这是将在Sierra上运行的Karabiner版本的前身)。我还没有尝试过,所以不知道此功能是否可用。
tubedogg

5
Karabiner-Elements尚不支持对修改器按键进行操作,这可能是必需的。
grokfully

该选项“带有以下修饰符:^”仅需要^与大写锁定一起按下才能触发动作。这根本不是问题所需要的。
defhlt

由于我们首先将Caps-Lock更改为“通过系统偏好设置控制”,因此KM看到USB事件,同时按下了Control键。如果省略^修饰符,该操作将永远不会触发。
讨厌

如果您使用键盘大师的路线,是否有任何方法可以将逃逸键映射到大写锁定以重新获得大写锁定功能?我喜欢同时按住ctrl和逃避键来限制大小写。
克瓦斯

1

要使用支持macOS 10.12及更高版本的Karabiner Elements进行操作,请打开~/.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.spoonHammerspoon结合使用。


除非我删除了本to_if_alone节中的修饰符(关键字和全部),否则我无法使用它。但是感谢您的摘录。这是超级有用的。
迈克尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.