如何在Mac OS X中使Caps Lock键像Esc键一样工作?
编辑: 如此答案所述,较新版本的MacOS现在已原生支持将Caps Lock重新绑定到Escape。因此不再需要安装第三方软件来实现此功能。
以下是使用Seil(以前称为PCKeyboardHack
)实现此功能的全面可视化步骤(带有链接)的尝试。
在弹出的对话框中将Caps Lock键设置为No Action
:
2) 现在,点击此处下载Seil并安装它:
3) 安装后,您将安装一个新的应用程序(Mountain Lion及更高版本),如果您使用较旧的操作系统,则可能需要检查新的系统偏好设置面板:
4) 选中标签“Change Caps Lock”,并将代码“53”输入作为Escape键的代码:
完成了! 如果没有立即生效,您可能需要重新启动计算机。
您可能还想查看KeyRemap4MacBook,这实际上是来自pqrs.org
的旗舰键盘重新映射工具,而且它是免费的。
如果您喜欢这些工具,您可以捐赠。虽然我与他们没有关联,但我已经使用这些工具很长时间,并且必须说那里的人一直在出色地维护、添加功能和修复错误。
这里是一个截图展示(数百个)可预先选择的选项:
PQRS还有一个很棒的实用程序叫做NoEjectDelay,您可以与KeyRemap4MacBook一起使用,重新编程弹出键。稍加调整后,我将我的设置为切换AirPort Wifi。
这些实用程序在重新映射Mac键盘时提供了无限的灵活性。玩得开心!
CTRL-[
实际上是ESC的正确等价物。https://dev59.com/iW445IYBdhLWcg3wH2rH#5036294 - campeterson我对这里的任何答案都不满意,于是寻找一个命令行解决方案。
在 macOS Sierra 10.12 中,苹果推出了一种新的用户键位映射方式。
如果这听起来不错,请查看 hidutil
。
例如,要将大写锁定键(caps-lock)映射到 Esc 键,请参考键位表,找到大写锁定键的使用代码为 0x39,Escape 的使用代码为 0x29。将这些代码与十六进制值 0x700000000 OR 运算后放入源码和目标中,如下所示:
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
我唯一知道的就是将大写锁定键映射为控制键、选项键或命令键。可以通过系统偏好设置中的"键盘和鼠标"面板进行操作。点击左下角的"修饰键",您就可以将Caps Lock、控制键(Control)、选项键(Option)和命令键(Command)重新映射到这些按键上。
@ Craig: 这表明大写锁定键可以被用作普通的——也就是非切换的——按键。在我的MacBook上,由于我已将Caps Lock重新映射为Control,因此大写锁定键灯从未亮过。它只是像控制键一样工作。
现在,使用 macOS Sierra,将 Caps Lock 键映射为 Esc 变得更加容易。
打开“系统偏好设置”→“键盘”。
点击右下角的“修改键”按钮。
点击下拉框,选择要重新映射的硬件键,并选择“Escape”(即 Esc)。
单击“确定”并关闭“系统偏好设置”。
可能可以实现。
来自TrueAffection.net上的一篇文章。
- 下载PCKeyboardHack并安装它。
- 进入系统偏好设置中的PCKeyboardHack。
- 启用“更改大写锁定”并将键码设置为53。
这个解决方案不涉及修补键盘驱动程序,但提供了一个针对Vim的特定解决方案。
OS X支持将大写锁定键映射到许多键,但您必须手动进行编辑.plist文件。该过程在这篇文章中描述。作为提示的附录,我建议您首先在系统偏好设置中将Caps-Lock设置为None,然后只需更改.plist文件中的一个值即可。此外,您当然可以使用属性列表编辑器而不是经过XML转换步骤。
技巧是将大写锁定键映射到帮助键(代码6),这不在大多数键盘上。但是如果是,则会将其视为插入键,您可能根本不使用它,因为您要求重新映射大写锁定以防止手部伸展;)
然后,您可以将Help和Insert键映射到vim中的Esc。
map <Help> <Esc>
map! <Help> <Esc>
map <Insert> <Esc>
map! <Insert> <Esc>
这对于 gvim(Vim.app)有效。我没能在终端中让vim工作,也没有测试过MacVim是否可行。
因此,这是一个相当复杂的、不太完善的解决方案,或者安装第三方hackery程序。你自己决定;)
编辑:刚刚注意到第3种解决方案,如果你使用MacVim,你可以使用Ctrl,Option和Command作为Esc。使用系统偏好设置将Caps Lock键映射到其中之一非常简单。
我尝试了几种解决方案,有以下笔记:
DoubleCommand 不能 允许您交换 Esc 和 Caps Lock。
PCKeyboardHack 可以 映射 Caps Lock 到 Escape,但无法将 Escape 映射到 Caps Lock。最近的版本将允许您通过编辑两个键进行完全交换。
这可能或可能不足以满足您的需求(我知道它对我来说是足够的)。
如果您不想安装第三方应用程序,而且只关心在iTerm内部使用vim,那么可以按照以下步骤操作:
如此文所述,将CapsLock键重新映射为Help键。
简要版:使用plutil或类似工具编辑~/Library/Preferences/ByHost/.GlobalPreferences*.plist
,它应该类似于以下内容:
<key>HIDKeyboardModifierMappingDst</key>
<integer>6</integer>
<key>HIDKeyboardModifierMappingSrc</key>
<integer>0</integer>
重新启动!简单的注销和登录对我没有起作用。
在iTerm中,为帮助添加一个新的键映射:发送十六进制代码0x1b,它对应于Escape键。
我知道这不完全是所要求的,但我认为寻找类似解决方案的许多人实际上是需要这种更专业的变体。
Ctrl + [
以代替按esc
键。在 Vim 中非常有用。 - myconode