对 HHKB 本身的布局已经很满意,没有调整的必要,不过在功能上有些许不足,如不能一键切换中英文输入法、使用方向键时容易误按等。准备借由 Karabiner Elements 实现一键切换中英文输入法、增加 Hyper 键及实现全局 Vi 模式。

HHKB Professional2 for Mac_v1

键盘上的按键可分为两种类型,一种是 字符键,触发某种特定行为,如 ABC123Delete 等;另一种是 修饰键,按住时会改变其它键的行为,但自身并无任何功能,如 ShiftCtrl等。默认键盘上字符键由短按实现,长按无行为或重复触发;而修饰键由长按实现,短按无作用。

我想做的便是给原字符键赋予修饰键作用,给原修饰键增加字符键功能。这种按键类型叫做 Dual-Role-Keys,直译过来就是双功能键:一个键即是字符键,也是修饰键。像在 MacBook Pro 中,可以开启按 Caps_Lock 键切换中英文输入法,而长按时切换大小写。

实现功能

  1. left_Shift:单按时,为 Caps_Lock
  2. 空格键:长按时,为 Hyper 键
  3. Tab 键:长按时,为 Vi Mode 触发键

配置

安装

  • 在终端输入 brew cask install karabiner-elements 安装
  • 或从 GitHub 下载安装

关于配置文件

  • Karabiner 的配置文件在 ~/.config/karabiner/karabiner.json
  • 每个配置文件里面可以存在多个配置
  • 每个配置里面分为
    • complex_modifications
    • simple_modifications

Left_Shift 增加 Caps_Lock 功能

实现短按 Left_Shift 时,切换中英文输入法;长按 Left_Shift 时功能不变。

这里可以手动输入,也可以用自带的规则 Change spacebar to left_shift.(Post spacebar if pressed alone) 更改。

{
"description": "Change Left_Shift to Caps_Lock.", //这里是名称
"manipulators": [
    {
        "from": {
            "key_code": "left_shift", //要修改的按键
            "modifiers": {
                "optional": [
                    "any"
                ]
            }
        },
        "to": [
            {
                "key_code": "left_shift" // 长按功能
            }
        ],
        "to_if_alone": [
            {
                "key_code": "caps_lock" // 短按功能
            }
        ],
        "type": "basic"
    }
]
}

空格键增加 Hyper 功能

实现长按空格键时,为Left_Control + Left_Command + Left_Option 集合的 Hyper 键;短按功能不变。

在 Karabiner-Elements 自带的规则中有一条 Change caps_lock to command+control+option+shift. 在上面新增一部分即可。另,我这里的 Hyper 没把 Left_Shift 算进去,这样当空格键 + Shift 键就成了 Hypers 又多了一个超级键。

//  "type": "basic" 的上一行新增以下代码:
"to_if_alone": [
            {
                "key_code": "tab"
            }
        ],

// 下面是完整代码
{
"manipulators": [
    {
        "description": "Change SpaceBar to command+control+option",
        "from": {
            "key_code": "tab",
            "modifiers": {
                "optional": [
                    "any"
                ]
            }
        },
        "to": [
            {
                "key_code": "left_control",
                "modifiers": [
                    "left_command", // 如果需要增加 `left_shift`,在这插入
                    "left_option"
                ]
            }
        ],
        "to_if_alone": [
            {
                "key_code": "tab"
            }
        ],
        "type": "basic" // 在这上一行新增
    }
]
}

Tab 键为 Vi Mode 触发键

Tab键作为 Vi Mode 的触发键,实现 Vi 的部分功能,如用 HJKL 做方向键。

载入 Vi Mode(rev 4.2) 规则,完成后启用 Vi Mode[S as Trigger Key],然后打开配置文件把所有 "key_code": "s" 中的 s 替换成需要的按键即可。当然也可以不替换直接使用。

移动模式

按键 功能
触发键 + H / J / K / L 方向键
触发键 + F FN 功能
触发键 + F + H / J / K / L Home / Page Down / Page Up / End
触发键 + 0 / 4 行尾 / 行首

可视模式

按键 功能
触发键 + V + H / J / K / L 按字符选择文本
触发键 + V + B / W 按单词选择文本
触发键 + V + 0 / 4 选择到行尾 / 行首

参考

题图为修改后,原配置图参考另一篇:macOS 养成计划之外接 HHKB 键盘设置备忘

附件

版本

  • macOS Sierra 10.12.6
  • Karabiner-Elements 0.91.13