前段时间回国,顺便带了块 60键客制化键盘回来。轴体选择了 Zealio V2 静音蓝轴,压力系数为 65g,略带段落感。选择静音版的原因是考虑到以后会在办公室用。V2 版的 Zealio 轴解决了 V1 版轴心晃动的问题,虽然依然没有 Box 轴那么稳定,但是对我来说已经完全可以接受。键盘的 PCB 版是 DZ60,可以刷 QMK 固件,这样的话我就可以把我最习惯的“Space fn”键位刷进去了。“Space fn”这个布局相对小众,但是对于用 vim 作为 editor 的用户来说,可能是最好用的键位。
Space fn 的核心思想是“按住空格键即为 fn 键,按下立即松开空格键即输入一个空格”。对于60键布局的小型键盘来说,键盘上本身是没有 F1 ~ F12 这些物理按键的,所以如果需要 F 系列功能键,需要首先按住键盘上的 fn 键再按下 1~0 这些数字键。于是在某种程度上,fn 键就成为了 60键键盘上很重要的一个键,其被按下的频率相比在87键或104键键盘上要高很多。
那么在60键键盘上,fn 键越容易被接触到对于敲键盘来说就越舒服,而一块键盘上,最容易被触碰到的按键当属空格键了。在 Space fn 键位下,空格键被按住不松的时候,就相当于 fn 键被激活,此时可以再去按其他键来实现 fn + x 键的组合。这个 x 可以是 1~0 数字键,也可以是别的键,只要你发挥想象就行。
目前我的 Space fn 键位最关键的几个键位是这样的:
- 按住空格 + 1~0 是 F1~F12
- 按住空格 + hjkl 是方向键,这一点和 vim 里移动光标的键位一致。
- 按住空格 + u 是 向上翻页,同样和 vim 保持一致。
- 按住空格 + d 是 向下翻页,同样和 vim 保持一致。
于是通过这种布局,我实现了在整个系统中都可以使用 vim 风格的光标移动,而且这个解决方案不依赖任何软件,纯通过键盘物理实现。
回到 QMK 固件本身上,目前有两个比较流行的图形化 QMK 键位编辑器,分别是中文的 http://qmkeyboard.cn/ 和英文的 https://config.qmk.fm/ 。两者都允许用户自行编辑键位,并把编辑保存成 JSON 文件或编译成二进制文件。保存成 JSON 可以作为存档;而编译成二进制可以用来刷固件。不过需要注意的是,这两个编辑器生成的 JSON 文件并不通用。
在 QMK 固件的概念中,fn 键的真实作用其实就是在不同的 fn 层之间进行切换。当 fn 键未被按下的时候,键盘处于第 0 层,而当其被按下的时候,便可以切换到键盘的其他层。要在 QMK 中实现“按住空格键即为 fn 键,松开空格键即输入空格”,需要为空格键设置这句代码:
LT(FN, KC_SPC)
其中 FN 对应的是你希望切换到的 fn 层的数字,比如对我的情况来说,我会把方向键和翻页键都放在第 1 层,所以我会写成 LT(1, KC_SPC)
。
当编辑好键盘布局之后,就可以编译下载固件文件,再使用 QMK toolbox 把固件写入键盘。
我的键盘目前设置了三个 fn 层:
- 键盘默认处在第 0 层。
- 按住空格不松进入第 1 层。
- 处于第 1 层的情况下再按住空格右侧的那个键进入第 2 层,也就是说,从第 0 层进入第 2 层是“按住空格再按住空格右侧的那个键”。听起来略微有些复杂,但是实际用起来没有影响,因为第 2 层只放了灯光调节的键和键盘固件 reset 键。
下面是每层布局的截图,供参考: