按下 ESC 键自动切换当前输入法为英文状态

type
Post
status
Published
date
Oct 22, 2023
slug
vim-esc
summary
tags
工具
vim
Karabiner
icon

痛点

在日常写代码过程中,偶尔会输入中文,这时回到 vim 中按下 esc 键后准备用 hjkl 挪动光标,中文输入法会尴尬地打出候选词

需求

  1. shift 键切换中英文输入。
  1. 按下 esc 键,会判断当前输入法状态,如果是 ABC,则进入 normal 模式;如果是中文输入法,则切换为 ABC,然后进入 normal 模式。
  1. 将 Capslock 键重新映射,短按为 esc 键。

解决方案

⚠️ 前提:
  • 只有系统自带 ABC 和 第三方中文输入法 这两个输入法。
  • 使用系统自带的 ABC 输入法来输入英文,并用掉第三方输入法中英文状态切换快捷键。
  • 使用第三方中文输入法(微信输入法或搜狗输入法),并关闭中文输入法的英文状态。
 
使用 MacOS 平台经典的改键神器: Karabiner
  • 将左 shift 键轻点映射为 F18
  • 将 F18 设置为切换输入法
  • 当单击 esc 键后,如果当前不是英文输入法,会模拟单击一次 F18 键

操作

将左 shift 键轻点映射为 F18

  1. 打开 ~/.config/karabiner/assets/complex_modifications 目录,新建一个 TapShift_LToSwitchInputSourceAsF18.json 文件
    1. 内容如下
  1. 打开 Karabiner-Elements,选择「Complex Modifications」>「Add Rule」,选择「Tap Shift_L As F18」
    1. notion image
      notion image

将 f18 设置为切换输入法

🚧
强烈建议只有自带 ABC 和 第三方中文输入法 这两个输入法。 如果有第三个输入法(如日文),有可能会在”日文-ABC”之间循环切换,无法切换到中文,我的做法是删除日文输入法。
打开 「系统设置」>「键盘」>「键盘快捷键」>「输入法」
notion image
notion image
 

当单击 esc 键后,如果当前不是英文输入法,会模拟单击一次 F18 键,再发送 esc

  1. 打开 ~/.config/karabiner/assets/complex_modifications 目录,新建一个 EnsureInputMethodAbcWhenEscTriggered.json 文件
    1. 内容如下
  1. 打开 Karabiner-Elements,选择「Complex Modifications」>「Add Rule」,选择「当 esc 键按下,如果当前不是英文输入法,会先模拟单击一次 F18 键以切换输入法,再发送一个 esc 键」
 

将 Capslock 键重新映射,短按为 esc 键。

notion image

参考

 

© insv 2021 - 2023