按下 ESC 键自动切换当前输入法为英文状态
type
Post
status
Published
date
Oct 22, 2023
slug
vim-esc
summary
tags
工具
vim
Karabiner
icon
痛点
在日常写代码过程中,偶尔会输入中文,这时回到 vim 中按下 esc 键后准备用 hjkl 挪动光标,中文输入法会尴尬地打出候选词
需求
- shift 键切换中英文输入。
- 按下 esc 键,会判断当前输入法状态,如果是 ABC,则进入 normal 模式;如果是中文输入法,则切换为 ABC,然后进入 normal 模式。
- 将 Capslock 键重新映射,短按为 esc 键。
解决方案
⚠️ 前提:
- 只有系统自带 ABC 和 第三方中文输入法 这两个输入法。
- 使用系统自带的 ABC 输入法来输入英文,并用掉第三方输入法中英文状态切换快捷键。
- 使用第三方中文输入法(微信输入法或搜狗输入法),并关闭中文输入法的英文状态。
使用 MacOS 平台经典的改键神器: Karabiner
- 将左 shift 键轻点映射为 F18
- 将 F18 设置为切换输入法
- 当单击 esc 键后,如果当前不是英文输入法,会模拟单击一次 F18 键
操作
将左 shift 键轻点映射为 F18
- 打开
~/.config/karabiner/assets/complex_modifications
目录,新建一个TapShift_LToSwitchInputSourceAsF18.json
文件
内容如下
- 打开 Karabiner-Elements,选择「Complex Modifications」>「Add Rule」,选择「Tap Shift_L As F18」
将 f18 设置为切换输入法
强烈建议只有自带 ABC 和 第三方中文输入法 这两个输入法。
如果有第三个输入法(如日文),有可能会在”日文-ABC”之间循环切换,无法切换到中文,我的做法是删除日文输入法。
打开 「系统设置」>「键盘」>「键盘快捷键」>「输入法」
当单击 esc 键后,如果当前不是英文输入法,会模拟单击一次 F18 键,再发送 esc
- 打开
~/.config/karabiner/assets/complex_modifications
目录,新建一个EnsureInputMethodAbcWhenEscTriggered.json
文件
内容如下
- 打开 Karabiner-Elements,选择「Complex Modifications」>「Add Rule」,选择「当 esc 键按下,如果当前不是英文输入法,会先模拟单击一次 F18 键以切换输入法,再发送一个 esc 键」