我对这里的任何答案都不满意,于是开始寻找命令行解决方案。
在 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