绝对的说法都是错误的。

增强 macOS 内置输入法的选词方式

macOS 内置的输入法用了一段时间还挺好用,没那么多花哨的功能响应也快。我日常工作中写代码、搜索已经习惯了使用英文,中文输入很少使用晦涩难懂的字词也没有使用网络热词的需求,但是第一行候选词很糟糕的情况时有发生,需要用 []、方向键或者使用触摸板/鼠标来选词。

而我日常使用 VIM(一个高度可定制化的古老编辑器)比较多,对 VIM 紧凑的键位使用方式和很多快捷键都形成了肌肉记忆(脱离了 VIM 反而记不得几个快捷键),打字时往往也是思维比较集中的时候,切换成让人不习惯的 macOS 内置输入法后,已经能明显的感受到选词在消耗我有限的注意力(可能是年纪大了吧。

好在 Karabiner-Elements 可以用来解决这个问题,一个强大好用的键盘定制化工具。

在 macOS 内置的中文输入法里面 [] 用于上下翻页和上下方向键的作用一样,左右方向键用于左右选词,只要根据自己的习惯设置几个和 []/方向键 功能一致的快捷键就能大大的增强中文选词输入的效率。

在 Karabiner 里面很容易做到,如下的配置将 CTRL + N 组合键映射到下方向键 ↓:

{
	"from": {
	    "key_code": "n",
        "modifiers": {
            "mandatory": [
	            "left_control"
            ]
        }
    },
    "to": [
        {
            "key_code": "down_arrow"
        }
    ]
}

CTRL + K 映射到上方向键  ↑:

{
	"from": {
	    "key_code": "k",
        "modifiers": {
            "mandatory": [
	            "control"
            ]
        }
    },
    "to": [
        {
            "key_code": "up_arrow"
        }
    ]
}

只有在切换到中文等输入法才进行映射的条件

"conditions": [
    {
        "input_sources": [
            {
                "language": "^zh-Hans$"
            },
            {
                "language": "^zh-Hant$"
            },
            {
                "language": "^yue-Hant$"
            },
            {
                "language": "^ja$"
            }
        ],
        "type": "input_source_if"
    }
]

可以通过 complex modifications 将多条规则以及条件组合起来。这里提供一份带有个人偏好的配置,共三组:

  1. 使用 CTRL + N 进行向下翻页/移动到下一行,CTRL + P 反之
    1. 我所有的键盘都会将 CTRL 和大写锁定键 ⇪ 进行替换,因为我基本不用大写锁定而 CTRL 用到的频率非常高,两者的使用便捷度与使用频率成反比
    2. 代码补全也是使用的如上的组合键,大多数编辑器都能使用这组快捷键进行上下移动,切换时没有额外的认知负担
    3. 没有设置左右选词,因为我觉得大部分情况下同一行选词使用数字键更快捷
  2. CTRL + H/J/K/L 分别映射到左下上右方向键,比如 CTRL + K 和上述 CTRL + P 的功能是一致的
    1. H/J/K/L 在 VIM 中作为正常模式的光标移动方式,基本上可以无缝切换
    2. 弥补第一组没有左右选词的“缺陷”
  3. 使用 TAB 来选下一个候选词,SHIFT + TAB 选前一个候选词
    1. 穷尽一行自动到下一行或者上一行

详细配置就不贴了,点这几个字快捷启动并导入Karabiner。 或者下载到本地后按需编辑,然后放到 ~/.config/karabiner/assets/complex_modifications/ 目录下。 最后需要手动应用配置

经验提示:

  • 大多数编辑器支持使用 CTRL + P/N 来对光标进行上下移动,所以最好不要将他们映射到 [] 而是映射到上下方向键,不然上下移动可能会变成 [[[]] 的字符输入。
    • 大多数编辑器都支持的光标移动快捷键:
      • CTRL + P 向上移动
      • CTRL + N 向下移动
      • CTRL + B 向左移动
      • CTRL + F 向右移动
      • CTRL + A 移动到行首
      • CTRL + E 移动到行尾
  • CTRL + H/J/K/L 以及上面提到的快捷键可能会和 VIM/TMUX 等软件已有的快捷键冲突,所以最好加上某种条件,比如排除终端应用或者仅在中文输入的时候使用。
  • 如果文本编辑用 Markdown 比较多,可能需要频繁使用 TAB 键来进行缩进,最好不要使用上面提供的第三组,否则得先切换输入法才能正常使用 TAB