macOS 下使用 CapsLock 键切换 ABC 与搜狗输入法

macOS 下使用 CapsLock 键切换 ABC 与搜狗输入法

在 macOS 下,默认的英文输入法 ABC 是不能删除的。它不能像 Windows 下那样,只要有一个搜狗输入法,然后在它内部切换中英文就够了。macOS 就不得不涉及如何在两个输入法之间做切换了。系统默认的切换快捷键是 Command + Space(空格)。但使用这个快捷键并不太好,因为很多编程用的 IDE 会用到这个快捷键,比如像 Visual Studio Code 里的智能提示(IntelliSense)。所以,我一般使用 CapsLock 来作为输入法切换键——因为它使用的频率低、离手近按键快。

macOS Mojave 下使用系统自带支持

可喜的是,在最新版的 macOS Mojave 下,已经默认支持了。



勾选后,只要按一下 CapsLock 就能在 ABC 和搜狗之间切换。而且长按就能激活大写——当然一般要输入大写,我感觉更方便地还是用左右 Shift 来输入,除非是要输入一长串大写字母(如全局变量)。

那么在 macOS High Sierra 和之前的版本里,该如何达到上述效果呢?有的同学可能有疑问,既然最新版已经实现了,为什么要讲旧版本呢?因为并不是所有人都愿意或立马升级到最新版。最新版在刚出来时,可能会有一些软件兼容性问题。比如这两天我就遇到了一个 VirtualBox 无法启动 macOS 虚拟机的问题。所以,对那些还留在旧版本的同学,我们还是有办法实现上述目标的,而且还是免费的,不用花钱、不用破解。关键就是 Karabiner Elements 这个软件。

macOS High Sierra 以下使用 Karabiner Elements 实现

Karabiner Elements 是一款免费、开源的键盘定制化工具。可以通过 Homebrew 或前往官网(https://pqrs.org/osx/karabiner/)下载安装包进行安装。它可以自定义规则来修改按键定义,十分方便。这里我们的目标是改写 CapsLock 键——当单独按下 CapsLock 实体键,发送一个不占用任何按键的 F17;而当按下 fn + CapsLock 时,才是切换为大写状态。规则很简单,就是一个 JSON 配置:

{ "title": "Using caps_lock to switch input source, see https://blog.kiliwalk.com/macos-capslock-switch-input-source/", "author": "kiliwalk(tianjianchn@qq.com)", "homepage": "https://blog.kiliwalk.com", "manual": "https://blog.kiliwalk.com/macos-capslock-switch-input-source/", "import_url": "karabiner://karabiner/assets/complex_modifications/import?url=https://blog.kiliwalk.com/images/caps_lock_switch_input_source.json", "rules": [ { "description": "Pressing caps_lock sends f17, pressing fn + caps_lock sends caps_lock", "manipulators": [ { "from": { "key_code": "caps_lock" }, "to": [ { "key_code": "f17" } ], "type": "basic" }, { "from": { "key_code": "caps_lock", "modifiers": { "mandatory": [ "fn" ] } }, "to": [ { "key_code": "caps_lock" } ], "type": "basic" } ] } ] }


首先要导入以上规则。有两种方法,一种是将以上内容保存为一个 JSON 文件(比如 caps_lock.json),然后复制到 ~/.config/karabiner/assets/complex_modifications 目录下。还有就是直接使用 Safari 或 Chrome 浏览器,打开这个网址:karabiner://karabiner/assets/complex_modifications/import?url=https://blog.kiliwalk.com/images/caps_lock_switch_input_source_v3.json,它会询问你是否启动 Karabiner Elements,确定后,就可以了。

接下来我们要应用这个规则。进入 Karabiner Elements Preferences -> Complex Modifications -> Rules,点击左下角的 Add rule,找到 Using caps_lock to switch input source... 这条规则,点击 Enable All 即可。



最后,我们还要去修改下系统里的切换输入法的快捷键(默认是 Command + Space)。前往 System Preferences -> Keyboard -> Shortcuts -> Input Sources,选中 Select the previous input source(选择上一个输入法),点击右侧的按键区域,然后按下 CapsLock 实体键,此时上屏的是 F17。同时取消勾选 Select the next source in input menu(选择“输入法”菜单中的下一个输入法)。

这样,当我们按下 CapsLock 后,就能在搜狗和 ABC 之间进行切换了。如果需要大写,按下 fn + CapsLock 就可以。这里之所以不是用长按 CapsLock 进入大写,是 Karabiner Elements 的一些限制——配置复杂,且也不太稳定。

搜狗输入法配置

除了系统层面快捷键的修改,搜狗输入法还要做一些调整。

按键配置里,中英文状态切换改为“禁用快捷键”。因为我们不需要用搜狗输入法的英文输入模式了。按键配置里,把当前输入态提示改为“无提示”。避免在按 CapsLock 切换时,还在桌面右上角提示大写状态。



拒绝生活的惯性,挖掘那些被我们习以为常的工具