Vimer 的福音:Mac 下 Caps + hjkl 作为方向键

本人所用的键盘是 WASD VP3 61 Key 的 -- Poker 3 方案,可以不借助于软件直接键盘上设置为 Caps + hjkl 来作为方向键。Caps 跳线为 Fn, 并选择一个 Layer, 把原本 Fn + ijkl 的方向键组合键重新映射为 Fn + hjkl 即可。

办公室的 61 键的键盘借于朋友体验,所以又重新把 DAS 87 键摆了出来。由于习惯了 61 键的 Caps + hjkl 的方向键,在 87 键盘上每次按方向键时右手都要离开它的 Home Row,很是不爽。别说是 87 键,即便是有些键盘把方向键压缩在右 Shift 下方,都无法接受右手右下移去按方向键。

Caps 键没什么卵用(只会用 Caps 来输入大写字母的当我没说),却常年占据着黄金位置(左手掌无需移动就能按到),所以主意是如何把 Caps 另作他们,对于 Vimer 来说最理想的方向键是 Caps + hjkl。

Mac 下有个键盘映射的工具 Karabiner, 先前的版本 KeyRemap4MacBook 只支持到 Mac OS 10.8, 而 Karabiner 也只能支持 10.9 到 10.11。而我的 Mac 系统是 macOS Sierra 10.12, 有一个不完全特性的 Karabiner 叫做 Karabiner-Elements, 它不能像 KeyRemap4MacBook 和 Karabiner 那样支持直接组合键的映射。因此在 macOS Sierra 一直未能把方向键映射成某个功能键(如 Caps) + hjkl,不得不用物理方向键。

有两种方法把 Caps + hjkl 映射为方向键

一:启用 "Change right_command+hjkl to arrow keys" 规则,并把  caps_lock 映射为 right_command

我一直在紧跟着最新的 Karabiner-Elements 版本(截止到2017-07-25 时版本为 0.91.9),今天偶然间发现 Karabiner-Elements 配置中多了一个 Complex Modifications 选项卡,点 "Add rule" 可以看到三个规则实例,

从按钮 "Import more rules from the Internet (open a web browser)" 可以找到更多的规则配置,其中有一个 Vi Mode 的规则,使用 S 或 D 作为  Trigger Key, 再配合 hjkl 作为方向键,这仍然不是我想要的。

实际我相当的规则是 "Change right_command+hjkl to arrow keys", 所以启用这个规则。别急,我们并不打算真正光用右手大拇指按住 command 键,同手右手按 hjkl 来使用方向键,反正就是右手腕别扭不过来。

所以下一步就是要把 Caps 嫁接到 right_command 上来,使用基本的 "Simple Modifications" 中的功能,只需加上一行 "caps_lock" 到 "right_command" 的映射

其余三个是键映射与 Caps + hjkl 用作方向键无关。

至此我们就可以在任何键盘上欢快的使用 Caps + hjkl 作为方向键,铵方向键时再也不需要让右手掌作半点移动了。

二:认识 Karabiner 规则文件

Karabiner-Elements 的配置文件是 ~/.config/karabiner/karabiner.json,前面图形界面中配置的规则会产生如下的相应内容:

看到这里我们应该能意识到,其实从技术上并不需要先启用 "Change right_command+hjkl to arrow keys" 规则,然后把 "caps_lock" 映射为 "right_command" 两步。

那么我们去掉 "simple_modifications" 中的 "caps_lock" 到 "right_command" 映射,直接把规则 "Change right_command+hjkl to arrow keys" 中所有 "right_command" 修改为 "caps_lock" 行不行呢?像下面那样修

改成

这样做的话,会有一定的功效,每按一次 caps_lock + hjkl 组合后都必须抬起键,不能一直按着 caps_lock 然后做用 hjkl 作为方向键,因为此时的 caps_lock 仍然担当着原来的 caps_lock 职责,等于是双重功能。

所以有一个解决的办法是,仍然保留 "right_command" + "hjkl" 的方向键功能,只是在规则文件中再加一个 "caps_lock" 到  "right_command" 的映射,效果上是一样的,只是在 Simple Modifications 中并不要 "caps_lock" 到 "right_command"  的映射条目。

最后的效果就是

有这一个规则就足矣。基于此我定制了一个规则文件Change caps_lock + hjkl to arrow_keys,也就是用下面的方式一次性导入即可。

三:直接导入我定制的 Change caps_lock + hjkl to arrow keys 规则

既然我们可以从网络上导入规则,那么当然可以自己预先定制好自己的规则也像他们那样发布一个规则链接。于是我也做了一个 json 规则文件。

请点击链接 Change caps_lock + hjkl to arrow keys, 应该会提示打开 Karabiner-Elements 应用

用 Karabiner-Elements 打开该链接

导入到 Karabiner-Elements 中

现在可以随意的 Enable/Disable 规则 "Change caps_lock+hjkl to arrow keys" 了,启用后的效果与方法一中是一样的。

链接:

  1. Karabiner-Elements complex_modifications rules

本文链接 https://yanbin.blog/vimer-mac-caps-hjkl-as-arrow-keys/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

17 Comments
Inline Feedbacks
View all comments
Hanger
Hanger
5 years ago

Karabiner-Elements12.1.0 无法 import 你的文件

Scc
Scc
6 years ago

好东西 赞一个

andy
andy
6 years ago

请教一下怎么样才能跟我的 "capslock 修改成 left_contro 兼容" 呢, 两个功能都是刚需

andy
andy
6 years ago
Reply to  Yanbin

哈哈,同感, 我老板每次敲我键盘都要骂我, 他们只是不喜欢尝试新鲜事物. 我之前表述得有问题, 其实我一直是用的 ctrl + hjkl来控制方向, 在系统设置里面把 Capslock 又改成ctrl 键, 这样就实现 capslock + hkjl 的快捷键了, 还能实现一些shell常用操作, capslock + a 行首, capslock + e 行末, capslock + u 删除整行的功能, 用了几年习惯了

andy
andy
6 years ago
Reply to  Yanbin

我刚刚在 karabinar-elements 的 example 下面找到了 ctrl + hjlk 的快捷键修改了, 谢谢啊, 不用自己改脚本了

beyond
beyond
6 years ago

请教一下我想修改成 空格+jkli 替换方向键 该怎么修改呢?
还有你这个规则需要能不能做成按住不放开caps lock键,然后jkl就是方向键了,现在你这必须要同时按一下caps lock+k才是上方向键啊。

kai
kai
6 years ago
Reply to  beyond

有个SpaceLauncher的工具可以做到

Yanbin
6 years ago
Reply to  kai

新的规则配置文件已经修复了按住 caps lock 不放,hjkl 连续方向键了。

resab
resab
4 years ago
Reply to  Yanbin

有这个配置文件 吗,这个 bug搞了好久

resab
resab
4 years ago
Reply to  Yanbin

确实可以,但是还不是我想要的效果,我之前在 win10用的是,按住 capslock,然后 hjkl 会生效,松开就回到正常,但是 mac 里,我松开了 caps lock还要再按一次 CAPSLOCK 才变正常 ,把 capslock 改成 tab 映射到 right _command 就不会,好像只有 大写键 这样

resab
resab
4 years ago
Reply to  Yanbin

好吧,看来还是win适合我