Hi!现在是2024-11-05 我有了更简单的方法,只需安装 MacVimSwitch ,就可以实现
- 按 ESC 键时自动切换到 ABC 英文输入法
- 内置 Shift 键切换 ABC 英文输入法和中文输入法
- 重要提示:使用前请先关闭输入法中的"使用 Shift 切换中英文"选项
- 如需关闭可在状态栏菜单中设置
- 温馨提示:如果你不想使用 Shift 键切换输入法,在 Mac 上,CapsLock 短按可以切换输入法,长按才是锁定大写
感谢 AI 编程技术的进步,这个仓库没有一行代码是我自己写的哈哈哈(都是 Cursor 生成的),尽管生成的时候 bug 很多,调试了好多次orz..
软件截图
历史内容(使用 karabiner 修改快捷键)
Mac 的 vim 中文切换问题折磨了我好几年,尝试过很多种方案但都不太好使,现在终于找到一个完美的解决方案,
- 适用于任何输入法
- 适用于任何 APP (终端 / vscode / obsidian)
实现方法
简单来说,利用 karabiner 软件修改按键
- 每次按 shift 的时候切换到系统自带的 ABC 英文输入法(而不使用第三方输入法的英文状态),再按一次则切换到中文输入法(可以是搜狗/讯飞/微信输入法等)
- 每次按 Esc 键的时候自动切换到 ABC 英文输入法 (也可以改 Esc 为你习惯的vim 退出编辑按键)
具体步骤
- 下载安装 karabiner karabiner-elements.pqrs.org/
它有点类似 window 的 auto hot key 软件,用于修改按键映射
安装后记得按软件的提示做好配置,需要系统权限什么的
- 在系统设置中添加一个不存在的 F18 快捷键(临时使用,后面这个映射请删掉)
- 设置 F18 和 option + F18 来控制切换上一次使用的输入法,第4步会用到
在系统设置-键盘-键盘快捷键-输入法里,将输入法切换的快捷键设置为 F18
这里的 F18 就用第2步临时设置的按键来输入的(因为Mac系统不能用输入键位名称的方式来改变,只能曲线救国)。设置好后,第2步的按键映射可以删掉了。
- 在 karabiner 中的 Complex Modifications 的 Add your own rule 中添加如下规则
有个性化需求的话,规则自己可以看着修改一下,很好懂的
(1)短按 ESC -> ESC 并切换英文输入法
{
"description": "短按 ESC -> ESC 并切换英文输入法",
"manipulators": [
{
"conditions": [
{
"input_sources": [
{
"language": "en"
}
],
"type": "input_source_unless"
}
],
"from": {
"key_code": "escape"
},
"to": [
{
"key_code": "escape",
"lazy": true
}
],
"to_if_alone": [
{
"key_code": "escape"
},
{
"key_code": "f18"
}
],
"to_if_held_down": [
{
"key_code": "escape"
}
],
"type": "basic"
},
{
"conditions": [
{
"input_sources": [
{
"language": "en"
}
],
"type": "input_source_if"
}
],
"from": {
"key_code": "escape"
},
"to": [
{
"key_code": "escape",
"lazy": true
}
],
"to_if_alone": [
{
"key_code": "escape"
}
],
"to_if_held_down": [
{
"key_code": "escape"
}
],
"type": "basic"
}
]
}
(2)短按 ESC -> ESC 并切换英文输入法
{
"description": "短按 ESC -> ESC 并切换英文输入法",
"manipulators": [
{
"conditions": [
{
"input_sources": [
{
"language": "en"
}
],
"type": "input_source_unless"
}
],
"from": {
"key_code": "escape"
},
"to": [
{
"key_code": "escape",
"lazy": true
}
],
"to_if_alone": [
{
"key_code": "escape"
},
{
"key_code": "f18"
}
],
"to_if_held_down": [
{
"key_code": "escape"
}
],
"type": "basic"
},
{
"conditions": [
{
"input_sources": [
{
"language": "en"
}
],
"type": "input_source_if"
}
],
"from": {
"key_code": "escape"
},
"to": [
{
"key_code": "escape",
"lazy": true
}
],
"to_if_alone": [
{
"key_code": "escape"
}
],
"to_if_held_down": [
{
"key_code": "escape"
}
],
"type": "basic"
}
]
}
- 大功告成!
需要注意的点是,这里其实使用的是切换到上一次使用的输入法,所以如果你有3个及以上的输入法,切换的时候需要注意一下,手动点击一次英文 ABC 输入法就行。
现在,你就可以在任何应用中,使用 Esc 切换到英文输入法啦(如果只想限制在特定 APP 中生效,或者