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 将多条规则以及条件组合起来。这里提供一份带有个人偏好的配置,共三组:
- 使用
CTRL + N
进行向下翻页/移动到下一行,CTRL + P
反之- 我所有的键盘都会将
CTRL
和大写锁定键 ⇪ 进行替换,因为我基本不用大写锁定而CTRL
用到的频率非常高,两者的使用便捷度与使用频率成反比 - 代码补全也是使用的如上的组合键,大多数编辑器都能使用这组快捷键进行上下移动,切换时没有额外的认知负担
- 没有设置左右选词,因为我觉得大部分情况下同一行选词使用数字键更快捷
- 我所有的键盘都会将
- 将
CTRL + H/J/K/L
分别映射到左下上右方向键,比如CTRL + K
和上述CTRL + P
的功能是一致的H/J/K/L
在 VIM 中作为正常模式的光标移动方式,基本上可以无缝切换- 弥补第一组没有左右选词的“缺陷”
- 使用
TAB
来选下一个候选词,SHIFT + TAB
选前一个候选词- 穷尽一行自动到下一行或者上一行
详细配置就不贴了,点这几个字快捷启动并导入 到 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
。