用 Karabiner Elements 自定义你的键盘

情提要

罗技的 k708 键盘坏了,这几年过的很苦。就不浪费钱了。买了个 100 多的键盘应付着,还不错也挺舒服的,就是 win 的键盘键位有点乱,比较遗憾,想着能不能在软件层面改一改键,继承之前 k708 的键位设置。

于是就找到了 Karabiner Elements 这个改键神器

Karabiner Elements

「 Karabiner Elements 」 是 macOS 上一款强大的改键软件,从简单的单键映射,到复杂的组合键映射全部都有,还可以自己定义映射规则,灵活性很高,然后还免费!

完美符合我的需求有木有!

先介绍下我之前的键位设置。

最大的变化是将 CAPSLOCK 键改成了 Fn 键,然后以此为基础新加了许多 Fn + X 形式的组合键。

感觉 CAPSLOCK 不是很常用,就把它换成常用的功能键 Fn 了。CAPSLOCK 则变成了 Fn + /

alt text

之后就是方向键 ⬆️ ⬇️ ⬅️ ➡️ 和编程常用的 ~ 和 ` 键了。

如果熟悉 vim 键位的话,可以把方向键绑到 H,J,K,L 键位上,即 Fn + H / J / K / L。

阿米洛默认是 Win 布局,对于 macOS 用户,可以交换 Win 和 ALT 键,正好就和 MacBook 上的 Option 和 Command 键对应了。

还有几个比较方便编程的快捷键,比如说光标的快速移动

光标移动到行首:Fn + M
光标移动到行尾:Fn + .
光标向前跳过一个单词:Fn + F
光标回退一个单词:Fn + B
最后就是 PageUp 和 PageDown 的设置了。

alt text

改键步骤

设计好自己习惯的快捷键后,就可以用 Karabiner Elements 进行改键了。

开整前照例先看看官方 doc 。

Karabiner 的安装和简单键的映射修改,可以参考这篇博文 「Karabiner Elements 安装及简单按键映射」。

因为我们自定义快捷键要改的键有点多,就直接选择 Use more complex rules。

在步骤 Step1 里,如果你有看到合适的 rules,可以直接从云端导入别人写好的。

不过我们身为程序员,当然是选择自己造轮子啦。

配置文件
把 Karabiner 的自定义配置文件 custom.json 放在 ~/.config/karabiner/assets/complex_modifications/文件夹下,Karabiner 会自动加载这些自定义配置。

custom.json 的数据结构
Karabiner 采用 json 格式储存键位配置,大致的 数据结构 如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"title": "Title for the list of rules/complex modifications."
"rules": [
{
"description": "This description is shown in Preferences.",
"manipulators": [
{
"type": "basic",

"from": from event definition,

"to": [
to event definition,
to event definition,
...
]
},
{
"type": "basic",
...
},
...
]
},
{
"description": "...",
"manipulators": [
...
]
},
...
]
}

编写 varmilo.json

如何知道某个按键对应的 key_code 呢?

Karabiner Elements 提供另一个 app,「 Karabiner EventViewer 」,通过它我们可以看到每一个按键对应的 key_code。

终于可以开始写阿米洛的快捷键配置了。

举个例子吧,将 CapsLock 键重新定义为 Fn 键

在 Karabiner EventViewer 中找到 CapsLock 和 Fn 的 key_code,caps_lock 和 fn,填入之前的数据结构中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"description": "Change CapsLock to Fn",
"manipulators": [
{
"type": "basic",

"from": {
"key_code": "caps_lock"
},

"to": [
{
"key_code": "fn"
}
]
}
]
},

是不是很简单!

再举个例子吧,将 Fn -> H 重新定义为 左箭头 ⬅️

如何表示组合键呢?

我们要在 json 里加上 modifiers,表示对基础键的修饰。

mandatory 表示必须与基础键一起出现的键,这里是 Fn。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"description": "Change Fn-HJKL to Arrow left,down,up,right",
"manipulators": [
{
"type": "basic",

"from": {
"key_code": "h", // 基础键
"modifiers": {
"mandatory": ["fn"], // 组合键
"optional": [
"caps_lock",
"option",
"command",
"shift",
"control"
]
}
},

"to": [
{
"key_code": "left_arrow"
}
]
},
...
]
}

加载自定义快捷键

当我们写好了所有规则后,保存 custom.json 到 ~/.config/karabiner/assets/complex_modifications/ 文件夹下,打开 Karabiner Elements。

选择 Complex modifications,点击 Add rule。

这时我们就能看到 Karabiner 已经自动加载我们刚刚写好的所有键位设置了。

就可以开始愉快地写码 打游戏 了。

最后
如果有小伙伴需要键位配置,在这里 拿走不谢。