一套适合 vim 和 macOS 用户的输入法切换方案

2023/09/17
Tags:  #Vim

需求

日常工作中经常使用 neovim 码代码和写文档,有时也在别的编辑器上使用 vim 插件,如果没有特殊设置,vim 模式会和中文输入法“打架”

因此我需要实现下面的特殊功能:

  1. caps 键替换成 esc,方便切换回 normal 模式
  2. 按下 esc 键后,输入法切换成英文,方便之后敲指令
  3. shift 键切换中英文输入
  4. 切换到不同应用自动切换中英文输入

有了这些功能可以大幅的提升 vim 的输入体验

尝试使用鼠须管(最后放弃)

鼠须管自带的功能能满足后 3 点的需求,对于第 1 点需求可以在 macOS 的设置中实现。刚开始的时候感觉很完美,但在实际的使用过程中发现,鼠须管没有长句联想能力,很影响输入效率(即使使用了几个月还是不能适应),鼠须管的 shift 切换在一些情况下也有 bug,对我来说是高频触发。因此在我发现另一种方法后,就放弃了使用鼠须管。

使用 Karabiner

无意中在 v2ex 上搜到这篇 帖子,根据帖子的配置,我用 Karabiner 实现了以上的需求。

前提条件

  • 使用系统自带的 ABC 输入法来输入英文,而不使用第三方输入法的英文状态
  • 再选择一个输入法来输入中文,目前我选择的是微信输入法

只设置以上两种输入法,因为不使用第三方输入法的英文状态,所以我们需要关闭第三方输入法的 shift 切换功能,确保不会切换过去。shift 在之后会被 Karabiner 用来控制 ABC 输入法和第三方输入法之间的切换(即中英文切换)

使用方法

  1. 对于上面的第一点需求,在 Karabiner 的 Simple Modifications 设置 caps 映射为 esc 即可
  2. 对于第 2、3 点需求,可以导入这个放在 GitHub 上的 Complex Modifications 配置
    它的实现原理是:当单击 esc 键后,如果当前不是英文输入法,会模拟单击一次 F18 键;当单击 shift 键后,会模拟单击一次 F18 键。因此,我们只需在 系统设置-键盘-键盘快捷键-输入法 里,将输入法切换的快捷键设置为 F18 就能实现单击 esc 或 shift 进行切换。
  3. 对于第 4 点需求,可以在 App Store 上搜索“自动切换输入法”,这个软件的付费版挺好用的(可能也有别的替代)