定制Mac的输入法切换按键为左Shift

目前,自己用的是搜狗输入法和Spacemacs,发现高概率偶现一个问题:

每次都要重启Emacs才能解决,十分蛋疼!!!

于是,想着是不是只有搜狗+Emacs才会有这个问题,因为:

  1. 其他场景(包括Vim)都没有遇到过
  2. 搜索不到相关问题,其他输入法应该没有

(自己用的搜狗+双拼,不知道是否有影响)

抱着试试的心态,决定放弃搜狗,直接用自带的输入法(也支持双拼)

过程中,遇到一个问题,就是搜狗支持 left-shift 切换中英文, 而系统的ABC和简体拼音却是通过 right-shift (其实是 Caps Lock ,但是自己通过 Karabiner-Elements 映射成了 right-shift)切换的。 自己很不习惯,且 left-shift 离小拇指更近,肯定比 right-shift 合理。

那么如何如何让 left-shift 支持切换呢?

直接映射成 Caps Lock 是不行的,因为这样 left-shift 的各种组合键就不能用了。

准确地说,我需要的是 left-shift 在单击时切换输入法,作为组合键时保留自己的能力。

可以利用 Karabiner-Elements 的 complex_modifications rules 实现,

参考: macOS 快速切换中英文输入法的快捷键是什么? - 知乎

系统偏好设置-键盘-快捷键 配置一个输入法切换的快捷键,注意:

在系统设置中键盘输入法设置切换上一个输入法,注意,下一个输入法不要选择,这样只要按这一个组合键输入法就会循环切换,当然我们肯定不会直接按个这组合键.

需要注意的是,亲测发现上面知乎回答提供脚本有点问题,导入之后没有标题和描述,完整格式应该如下:

{
    "title": "Map Lft-Ctl+Open-Bracket to Close-Bracket",
    "rules": [
        {
            "description": "单击左右Shift切换输入法!",
            "manipulators": [
                {
                    "from": {
                        "key_code": "left_shift"
                    },
                    "to": [
                        {
                            "key_code": "left_shift"
                        }
                    ],
                    "to_if_alone": [
                        {
                            "key_code": "0",
                            "modifiers": [
                                "left_control",
                                "left_option",
                                "left_command"
                            ]
                        }
                    ],
                    "type": "basic"
                },
                {
                    "from": {
                        "key_code": "right_shift"
                    },
                    "to": [
                        {
                            "key_code": "right_shift"
                        }
                    ],
                    "to_if_alone": [
                        {
                            "key_code": "0",
                            "modifiers": [
                                "left_control",
                                "left_option",
                                "left_command"
                            ]
                        }
                    ],
                    "type": "basic"
                }
            ]
        }
    ]
}

接下来就是导入了,由于 Karabiner-Elements 只支持从在线网站导入,这里也花了点时间,具体来说,可以通过在浏览器发起一个导入:

karabiner://karabiner/assets/complex_modifications/import?url=xxxxx

xxxxx 就是本地路径编码后的值。

参考:keyboard - Karabiner elements custom complex rule - Ask Different

以上,就可以在单击 left-shift 时切换输入法,而不影响其组合键的使用了。