问题描述
在macbook中,系统默认是使用capslock进行中英文切换的,一般不会有什么问题,也不会有人去改这个设置。
假设某一天,我们拿到了人生中第一台MacBook,高高兴兴的接受了上面这个设定。你刻苦练习Apple武林秘笈中的各种快捷键和功能键指法,终于在某一天你已经能运用自如了,正当打字打得畅快淋漓忘乎所以时……
点了一下capslock,中文并没有变成英文。
又点了一次capslock,这次你盯着菜单栏的「中/英」图标,发现并没有什么问题。
你又点了几次,发现一点问题都没有。
看来刚刚是错觉,又愉快地继续打字,直到上面的事情重复出现。
终于某一天,你发现:在盯着菜单栏的时候,这个问题不会出现;而在快速打字时,它总是在意想不到的情况下出现。
就像MacBook产生了意识一样!
为什么会这样
上面的描述就是发生在我身上的事情,在三年之间,我饱受它的困扰。尤其是在vscode中快速打字切换中英文时,出现的概率几乎有20%。
根据找到的资料,问题应该出现在macOS的「防误触策略」。
相关问题链接,这个问题在v2ex上数不胜数:
V2EX - 2021 年了, macbook 的中英文输入切换仍然不够流畅
V2EX - 我怀疑我的 MacBook 产生了意识
V2EX - 只有我觉得 macOS 的“防误触”功能很反人类吗?
V2EX - 各位的 Macbook Pro 16 寸有遇到中英文切换不灵敏的问题吗?
如何解决
相关问题下有很多奇怪的解决方案,对我有效(操作比较简单)的只有使用Karabiner Elements
映射按键。
可以尝试使用Ctrl + Space
而不是Capslock
来切换输入法。相信我,这样做的话中英文100%能切换成功。
关于Karabiner Elements
的介绍请狠狠地戳这里。
a. 关闭capslock切换输入法
可以直接在设置中搜索「锁定」,并关闭图中的这个选项。
b. 添加Karabiner Element规则
我们要将Capslock
映射到Ctrl + Space
,从而实现点一下大写键就能在英文和输入法之间切换的功能。
添加以下规则到你自己的complex规则json中:
{
"description": "Change capslock to ctrl+space if taps alone",
"manipulators": [{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"optional": ["any"]
}
},
"to": [{
"key_code": "caps_lock"
}],
"to_if_alone": [{
"key_code": "spacebar",
"modifiers": [
"left_control"
]
}],
"to_if_held_down": [
{
"key_code": "caps_lock"
}
]
}]
},
以上规则可以实现:
- 点一下
Capslock
,切换中英文 - 按住
Capslock
,切换大小写
保存后,到Karabiner Elements
中找到Complex Modifications
,点击Add Rules
并选择Change capslock to ctrl+space if taps alone。
最后,世界应该和平了。
配合Input Source Pro
使用
这是一个用来提示当前输入法模式的工具,可以时刻知道自己当前所使用的输入模式,避免用错输入模式而猛按退格键的情况
可以自定义在何时显示,例如:输入焦点变更、输入法切换、切换应用。也可以跟随光标而移动。最重要是,目前还是免费的。
软件官网:请狠狠戳这里
用上后,再也不怕切换中英文失败了…
开启跟随光标移动的话…效果如图:
(为中文和英文设置不一样的颜色就可以很方便区分了)