我如何使大写锁定工作像Esc在Mac OS X?


当前回答

这是有可能的。

解决方案1

摘自trueintimacy网站上的一篇文章。

下载并安装PCKeyboardHack。 进入系统首选项中的PCKeyboardHack。 启用“Change Caps Lock”并设置键码为53。

解决方案2

这个解决方案不涉及修补键盘驱动程序,而是提供了一个特定于Vim的解决方案。

OS X支持将大写锁键映射到一大堆键,但你必须“手动”,编辑.plist文件。本文描述了这个过程。作为提示的补充,我建议你首先在系统首选项中将Caps-Lock设置为None,然后你只需要更改.plist文件中的一个值。当然,您也可以使用属性列表编辑器,而不是执行XML转换步骤。

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

然后你可以在vim中将帮助键和插入键映射为Esc键。

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

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

因此,这是一个相当复杂的、不成熟的解决方案,或者安装一个第三方的黑客。你自己选;)

编辑:刚刚注意到解决方案3,如果你使用MacVim,你可以使用Ctrl,选项和命令作为Esc。使用系统首选项,将Caps Lock映射到其中一个键是很简单的。

其他回答

这是有可能的。

解决方案1

摘自trueintimacy网站上的一篇文章。

下载并安装PCKeyboardHack。 进入系统首选项中的PCKeyboardHack。 启用“Change Caps Lock”并设置键码为53。

解决方案2

这个解决方案不涉及修补键盘驱动程序,而是提供了一个特定于Vim的解决方案。

OS X支持将大写锁键映射到一大堆键,但你必须“手动”,编辑.plist文件。本文描述了这个过程。作为提示的补充,我建议你首先在系统首选项中将Caps-Lock设置为None,然后你只需要更改.plist文件中的一个值。当然,您也可以使用属性列表编辑器,而不是执行XML转换步骤。

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

然后你可以在vim中将帮助键和插入键映射为Esc键。

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

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

因此,这是一个相当复杂的、不成熟的解决方案,或者安装一个第三方的黑客。你自己选;)

编辑:刚刚注意到解决方案3,如果你使用MacVim,你可以使用Ctrl,选项和命令作为Esc。使用系统首选项,将Caps Lock映射到其中一个键是很简单的。

自macOS 10.12.1以来,可以将Caps Lock重新映射为Esc本机(Apple > System Settings…> Keyboard > Keyboard Shortcuts > Modifier Keys in macOS 13,或之前的System Preferences -> Keyboard -> Modifier Keys)。

如果你不想安装第三方应用程序,并且你真的只关心iTerm中的vim,下面的方法是有效的:

如上所述,将CapsLock重新映射为Help。

短版本:使用plutil或类似编辑~/Library/Preferences/ByHost/. globalpreferences *。Plist,它应该看起来像这样:

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

重新启动!简单的登出和登录对我来说不起作用。

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

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

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

在macOS Sierra 10.12版本中,苹果为用户引入了一种重新映射按键的新方式。

不需要摆弄系统gui 不需要特殊权限 完全可定制的 不需要安装任何第三方的垃圾,如PCKeyboardHack / Seil / Karabiner / KeyRemap4MacBook / DoubleCommand / NoEjectDelay

如果这听起来不错,看看hidutil。

例如,要将caps-lock重新映射为escape,请参考键表并发现caps-lock的使用代码为0x39,而escape的使用代码为0x29。将这些代码或十六进制值0x700000000放在源文件和dest文件中,如下所示:

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

您可以在同一个命令中添加其他映射。就我个人而言,我喜欢将caps-lock重映射为退格,并将退格重映射为delete:

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. ldws . capslockbackspace的文件中。Plist然后执行:

launchctl load com.ldaws.CapslockBackspace.plist

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