Karabiner-Elements 是 macOS 改键的事实标准,但它"改完键没反应"的劝退率也是最高的——原因几乎都出在权限上。先把两项权限给对,再谈玩法。
第一步:给全两项权限(必做)
brew install --cask karabiner-elements
安装后打开 系统设置 → 隐私与安全性,确认 Karabiner-Elements / karabiner_console_user_server 出现在以下两个列表并且已勾选:
- 输入监控(Input Monitoring)——不勾选则完全读不到按键;
- 辅助功能(Accessibility)——不勾选则能读键但发不出改后的键。
常见坑:升级系统或重装软件后权限会被重置,表现为"突然所有规则失效",回去重新勾一遍即可。
第二步:单键替换用 Simple Modifications
把某个键一对一换成另一个键(这是最简单的场景):
- 打开 Karabiner-Elements →
Simple Modifications标签; - 选目标设备(如 Mac 内置键盘),点
Add item; - From key 选
caps_lock,To key 选escape——经典"大写锁定向 Esc"改法,Vim 用户必备。
第三步:组合与条件规则用 Complex Modifications
需要"按下 A 时是 X、组合时是 Y"这类逻辑(比如 Cmd+H 显示桌面、双击修饰键切换输入法),用 Complex Modifications 标签。
不要手写 JSON——官方规则库收录了几百条现成规则:
- 点
Add predefined rule,会跳转到 ke-complex-modifications.pqrs.org; - 搜索想要的规则(如 "Emacs key bindings"、"Win-style shortcuts"),点
install; - 回到软件勾选启用即可。
第四步:外接键盘要单独确认设备
插上机械键盘后规则不生效?到 Devices 标签:
- 确认外接键盘出现在列表里;
- 勾选
Modify events,否则该键盘按键原样直通,所有规则都不作用于它。
调试:规则到底触发没有
菜单栏图标 → EventViewer,能看到 Karabiner 实际拦截到的按键流。改了规则没效果时:在这里按一遍按键,确认 From 描述的和系统收到的键名一致(例如很多人以为改了右 Shift,实际系统上报的键名是 right_shift)。
配置文件在 ~/.config/karabiner/karabiner.json,换 Mac 同步配置直接拷这一个文件;软件会自动热加载,改完保存立即生效,不用重启。