【问题标题】:Using Caps Lock as Esc in Mac OS X在 Mac OS X 中使用 Caps Lock 作为 Esc
【发布时间】:2010-09-12 18:12:02
【问题描述】:

如何使 Caps Lock 像 Mac OS X 中的 Esc 一样工作?

【问题讨论】:

  • 对于使用 vim 的程序员来说,这似乎是一项标准任务;因此我投票重新开放
  • 另一种方法是将 Caps Lock 映射到 Control(系统偏好设置 > 键盘 > 修饰键)并为 esc 执行转义序列 Ctrl + [。对 Vim 很有用。
  • 适用于 macOS Sierra 的原生解决方案:stackoverflow.com/a/41004544/1940276
  • 适用于 macOS Sierra 的本机解决方案是第二好的答案(来自@rkusa)

标签: macos vim capslock


【解决方案1】:

编辑:this answer 中所述,较新版本的 MacOS 现在原生支持将 Caps Lock 重新绑定到 Escape。因此,不再需要安装第三方软件来实现这一点。


这是我对如何使用Seil(以前称为PCKeyboardHack)实现这一目标的全面、直观的演练答案(带有链接)的尝试。

  1. 首先,进入System Preferences,选择Keyboard,然后选择Keyboard Tab(第一个标签),然后点击Modifier键

在弹出的对话框中设置Caps Lock KeyNo Action:

2) 现在,click here to download Seil 并安装它:

3) 安装后,您将安装一个新的应用程序(Mountain Lion 和更新版本),如果您使用的是旧操作系统,您可能需要检查新的系统偏好设置窗格:

4) 选中“更改大写锁定”框并输入“53”作为转义键的代码:

你已经完成了!如果它不能立即工作,你可能需要重新启动你的机器。

印象深刻?想要更多控制权?

您可能还想查看KeyRemap4MacBook,它实际上是来自pqrs.org 的旗舰键盘重新映射工具 - 它也是免费的。

如果您喜欢这些工具,可以make a donation。我与他们没有任何关系,但我已经使用这些工具很长时间了,不得不说那里的人在维护这些、添加功能和修复错误方面做得非常出色。

这是一个显示几个(数百个)预选选项的屏幕截图:

PQRS 还有一个名为NoEjectDelay 的强大实用程序,您可以将它与KeyRemap4MacBook 结合使用,以重新编程弹出键。稍作调整后,我设置为切换 AirPort Wifi。

这些实用程序在重新映射 Mac 键盘时提供了无限的灵活性。玩得开心!

【讨论】:

  • 我想澄清一下,我已经单独使用 PCKeyboardHack 没有 KeyRemap4Macbook 近 2 年来做到这一点。
  • 请注意,如果您使用外接键盘,则应为每个键盘重复第一步(即大写锁定 = 无操作)。我没有为我的外部键盘执行此步骤,因此由于意外的大写锁定保护,大写锁定没有响应非常快速的按键。 superuser.com/questions/317900/eliminate-macbook-capslock-delay
  • 很棒的教程。我将 Caps Lock 映射到 Esc 大约一年。这是非常有效的。然而,有一天,我正在与一位高级开发人员配对。我告诉他我使用 Vim 作为我的主要编辑器。我也是,他说。他打开他的机器,我们开始工作。当轮到我编辑代码时,我摸索着绊倒了,因为他的 Caps Lock 没有映射。我一直试图一直向上到 Esc,但我每隔一段时间就会按一下 Caps,然后我的正常命令就会改变。他教我 Ctrl-c 也会让你回到可视模式。 帮自己一个忙,开始使用 Ctrl-c。
  • (每天学习更多)CTRL-[ 实际上相当于 ESC。 stackoverflow.com/questions/5030164/…
  • 如果您还可以编辑并在顶部提及这现在是 macOS 10.12.1 中的本机功能(根据@rkusa 的回答),这样新用户就不必去下载第三方,那就太好了软件
【解决方案2】:

从 macOS 10.12.1 开始,可以将 Caps Lock 本地重新映射到 Esc(系统偏好设置 -> 键盘 -> 修改键)。

【讨论】:

  • 太棒了!在听说新的 MBP 没有转义键后,我发现了这一点。看起来苹果预计会有一些反弹。
  • 正在运行 El Capitan 10.11.6,此设置已可用。
  • 感谢上帝;在 Sierra 打破 Seil/Karabiner 之后,我以为我注定要失败。
  • 奇怪的是,我在 10.11.6 上,没有这个选项。我只被允许将 esc 重新映射到 caps、ctrl、opt 或 command。这适用于我的 WASD 键盘 v2。
  • 有没有办法通过命令行做到这一点?也许采用类似于这些的方法? github.com/herrbischoff/awesome-osx-command-line#keyboard
【解决方案3】:

我对这里的任何答案都不满意,于是开始寻找命令行解决方案

在 macOS Sierra 10.12 中,Apple 为用户引入了一种重新映射键的新方法。

  • 无需摆弄系统 GUI
  • 不需要特殊权限
  • 完全可定制
  • 无需安装任何 3rd-party 废话,例如 PCKeyboardHack / Seil / Karabiner / KeyRemap4MacBook / DoubleCommand / NoEjectDelay

如果这听起来不错,请查看hidutil

例如,要将大写锁定重新映射为转义,请参阅key table,发现大写锁定的用法代码为 0x39,而转义的用法代码为 0x29。将这些代码或十六进制值为 0x700000000 的代码放在源和目标中,如下所示:

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x700000029}]}'

您可以在同一命令中添加其他映射。就个人而言,我喜欢将大写锁定重新映射到退格键,并将退格键重新映射为删除:

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x70000002A}, {"HIDKeyboardModifierMappingSrc":0x70000002A,"HIDKeyboardModifierMappingDst":0x70000004C}]}'

查看当前映射:

hidutil property --get "UserKeyMapping"

您的更改将在系统重新启动时丢失。如果您希望它们持续存在,请在启动代理中配置它们。这是我的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!-- Place in ~/Library/LaunchAgents/ -->
<!-- launchctl load com.ldaws.CapslockBackspace.plist -->
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.ldaws.CapslockEsc</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/hidutil</string>
      <string>property</string>
      <string>--set</string>
      <string>{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x70000002A},{"HIDKeyboardModifierMappingSrc":0x70000002A,"HIDKeyboardModifierMappingDst":0x70000004C}]}</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

我已将此内容放入位于~/Library/LaunchAgents/com.ldaws.CapslockBackspace.plist 的文件中,然后执行:

launchctl load com.ldaws.CapslockBackspace.plist

【讨论】:

  • +!这是在 macOS 上重新映射键的现代且正确的方法
  • Karabiner 的issue with repeating keys 促使我寻找用于密钥重新映射的本机解决方案。这篇文章和another in apple.stackexchange.com 帮助很大。
  • 感谢您,+1!我在Apple post 中添加了一些切线注释,希望为我们这些不想要 Esc 键但不使用 Caps Lock 的穷人增加一些价值。
  • 对于有内置键盘问题的 MacBook 的好方法。我的导致键盘设置出现问题,所以我无法在那里重新映射任何键。
  • 我无法使用LoginHook 方法使其正常工作——我猜它执行后可能会选择我的斯堪的纳维亚键盘的本地键盘设置?无论如何,stackoverflow.com/a/22872222/874188 指出 LoginHook 已被弃用,并提倡使用 launchd 代替。
【解决方案4】:

我唯一知道如何做的就是将 Caps Lock 映射到 Control、Option 或 Command。这可以通过系统偏好设置的键盘和鼠标面板来完成。单击左下角的“修改键”,您将能够将 Caps Lock、Control、Option 和 Command 重新映射到其中的任何一个。

@克雷格: 这表明 Caps Lock 可以用作普通键,即非切换键。在我的 MacBook 上,由于我已将 Caps Lock 重新映射到 Control,因此 Caps Lock 灯永远不会亮起。它的作用就像 Control 键。

【讨论】:

【解决方案5】:

现在使用 macOS Sierra 将 Caps Lock 键映射到 Esc 变得更加容易。

  1. 打开系统偏好设置 → 键盘。

  2. 点击右下角的修改键按钮。

  3. 单击要重新映射的硬件密钥旁边的下拉框,然后选择 Escape。

  4. 单击确定并关闭系统偏好设置。

https://9to5mac.com/2016/10/25/remap-escape-key-action-macbook-pro-macos-sierra-10-12-1-modifier-keys/

【讨论】:

    【解决方案6】:

    这是可能的。

    解决方案 1

    来自 TrueAffection.net 上的an arcticle

    • 下载 PCKeyboardHack 并安装它。
    • 转到系统偏好设置中的 PCKeyboardHack。
    • 启用“更改大写锁定”并将键码设置为 53。

    解决方案 2

    此解决方案不涉及修补键盘驱动程序,而是为您提供 Vim 特定的解决方案。

    OS X 支持将 Caps Lock 键映射到一大堆键,但您必须“手动”完成,编辑 .plist 文件。该过程在this article 中进行了描述。作为该提示的附录,我建议您首先在系统偏好设置中将 Caps-Lock 设置为 None,然后您只需要更改 .plist 文件中的一个值。此外,您当然可以使用属性列表编辑器来代替 XML 转换步骤。

    诀窍是将 Caps Lock 键映射到 Help 键(代码 6),这在大多数键盘上都没有。但如果是,它将被视为插入键,您可能不会使用它,因为您询问重新映射 Caps Lock 以防止伸手;)

    然后您可以将帮助和 Insert 键映射到 vim 中的 Esc

    map  <Help> <Esc>
    map! <Help> <Esc>
    map  <Insert> <Esc>
    map! <Insert> <Esc>
    

    这适用于 gvim (Vim.app)。我没有让它在终端中与 vim 一起工作,也没有在 MacVim 上测试过。

    因此,这是一个复杂的、半生不熟的解决方案或安装第三方黑客。你的选择;)

    编辑:刚刚注意到解决方案 3,如果您使用的是 MacVim,您可以使用 CtrlOptionCommand 作为 Esc。使用系统偏好设置将 Caps Lock 映射到其中一个键很简单。

    【讨论】:

    • 重新解决方案3:MacVim中如何使用Ctrl、Option或Command作为Esc?我在首选项中找不到此设置。
    • 您在系统偏好设置中映射它 => 键盘。
    • 你提到的提示在哪里?
    • Maletor - 那里没有地方告诉 macvim 使用控制作为转义
    • @MatthewSchinckel 就是这样一个链接:hints.macworld.com/article.php?story=20060825072451882
    【解决方案7】:

    Seil 在 macOS Sierra(10.12 测试版)上尚不可用。因此,我一直在使用具有以下设置的键盘大师:

    感谢此 github 评论:https://github.com/tekezo/Seil/issues/68#issuecomment-230131664

    【讨论】:

    • 我正在使用github.com/tekezo/Karabiner-Elements(适用于 Sierra)。到目前为止工作得很好,虽然我希望它能做到“Control_L 到 Control_L(+ 当你只输入 Control_L 时,发送 Escape)”
    • @atomkirk 你介意分享你使用的 Karabiner JSON 配置吗?
    • { "profiles": [ { "name": "Default profile", "selected": true, "simple_modifications": { "caps_lock": "escape" } } ] }
    • Karabiner 使用 atomkirk 的 JSON 为我解决了问题。尽管有上面的截图,Keyboard Maestro UI 还是一团糟,我无法对其进行配置。
    【解决方案8】:

    在尝试了其中几种解决方案后,我有一些注意事项:

    DoubleCommand不会允许你交换 esc 和 caps-lock。

    PCKeyboardHack 允许您将大写锁定映射到转义,但无法将转义映射到大写锁定。最近的版本将允许您通过编辑两个键来执行完全交换。

    这可能足以满足您的需求,也可能不足以满足您的需求(我知道它适合我的需求)。

    【讨论】:

    • PCKeyboardHack 不允许您将转义映射到大写锁定,但配套应用程序 KeyRemap4MacBook 可以。它可以让你映射“Escape to CapsLock”和“Shift+Escape to CapsLock”。
    【解决方案9】:

    如果您不想安装第三方应用程序并且您真的只关心 iTerm 中的 vim,则可以使用以下方法:

    按照here 的描述将 CapsLock 重新映射到帮助。

    短版:使用 plutil 或类似工具编辑~/Library/Preferences/ByHost/.GlobalPreferences*.plist,它应该看起来像这样:

    <key>HIDKeyboardModifierMappingDst</key>
    <integer>6</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>0</integer>
    

    重启!简单的注销和登录对我不起作用。

    在iTerm中,为Help添加一个新的键映射:发送十六进制代码0x1b,对应Escape。

    我知道这并不完全是我们所要求的,但我认为许多人寻找这样的解决方案的意图实际上是这个更专业的变体。

    【讨论】:

      【解决方案10】:

      为了使用 PCKeyboardHack 和 KeyRemap4MacBook 实际交换转义键和大写锁定键(不仅仅是将一个映射到另一个),您必须按照this thread 中的说明,将大写锁定键映射到键码不被键盘使用,但被 KeyRemap4MacBook(例如 110)占用。然后,在PCKeyboardHack中,选择适当的选项,将该键码映射到转义(在110的情况下,它是“应用密钥逃脱”)。这是您的 KeyRemap4MacBook 首选项的外观(前提是您选择了“仅显示启用”复选框)。

      我最初试图将此信息as an edit 发布到cwd's excellent answer,但被拒绝了。我鼓励任何想走我描述的路线的人先阅读他/她的回复。

      【讨论】:

        【解决方案11】:

        打开键盘首选项并单击修饰键...您可以将大写锁定键更改为控制、选项、转义或命令。

        【讨论】:

        • 都不是发帖人询问的“Esc”。可能适用于 Vim。
        • @RafiJacoby EscEscape 有什么区别? (严肃的问题)
        【解决方案12】:

        Seil 还不能在 macOS Sierra 上运行,所以我用的是Karabiner Elements,从https://pqrs.org/latest/karabiner-elements-latest.dmg 下载。

        要么使用GUI,要么将以下内容放入~/.karabiner.d/configuration/karabiner.json

        {
          "profiles" : [
            {
              "name" : "Default profile",
              "selected" : true,
              "simple_modifications" : {
                "caps_lock" : "escape"
              }
            }
          ]
        }
        

        【讨论】:

        • 请注意,Karabiner 元素会破坏触摸栏和 fn 键
        【解决方案13】:

        您还可以使用 DoubleCommand 重新映射此键和其他键。

        IIRC,它将 Caps Lock 映射到 Esc。

        【讨论】:

        【解决方案14】:

        登山扣元素 一个强大而稳定的 macOS 键盘定制器。 (免费软件)

        https://pqrs.org/osx/karabiner/index.html

        为我工作,让 Mojave 将大写锁定更改为退格

        【讨论】:

          猜你喜欢
          • 2020-05-18
          • 2011-11-08
          • 2015-02-09
          • 2011-08-14
          • 2023-03-06
          • 2012-10-23
          • 2011-08-25
          • 1970-01-01
          • 2013-03-04
          相关资源
          最近更新 更多