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 作为方向键,铵方向键时再也不需要让右手掌作半点移动了。

二:直接修改配置文件,无需 caps_lock 到 right_command 的映射

除以上利用图形界面操作外,我们还可以直接在 Karabiner-Elements 的配置文件 ~/.config/karabiner/karabiner.json 中定制规则。当我们执行了前面的设定后,该配置文件的相应内容是

    "profiles": [
        {
            "complex_modifications": {
                "parameters": {
                    "basic.to_if_alone_timeout_milliseconds": 1000
                },
                "rules": [
                    {
                        "description": "Change right_command+hjkl to arrow keys",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "h",
                                    "modifiers": {
                                        "mandatory": [
                                            "right_command"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "left_arrow"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "j",
                                    "modifiers": {
                                        "mandatory": [
                                            "right_command"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "down_arrow"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "k",
                                    "modifiers": {
                                        "mandatory": [
                                            "right_command"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "up_arrow"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "l",
                                    "modifiers": {
                                        "mandatory": [
                                            "right_command"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "right_arrow"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    }
                ]
            },
            "simple_modifications": {
                "caps_lock": "right_command",

看到这里我们应该能意识到,其实从技术上并不需要先启用 "Change right_command+hjkl to arrow keys" 规则,然后把 "caps_lock" 映射为 "right_command" 两步。我们完全可以在配置文件中直接修改 "Change right_command+hjkl to arrow keys" 为 "Change caps_lock+hjkl to arrow keys", 然后其中所有的

"modifiers": {
    "mandatory": [
        "right_command"
    ]

改成

"modifiers": {
    "mandatory": [
        "caps_lock"
    ]

这时候无需 Simple Modifications 中的 caps_lock 到 right_command 的映射,最后的效果就是

有这一个规则就足矣。

三:直接导入我定制的 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" 了,启用后的效果与方法二中是一样的。

类别: Vim. 标签: , . 阅读(12). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz