核心思路

在 vim 中输入中文时切换输入法会非常不方便。比如写了中文注释,然后 ESC 进入 normal 模式,还需要再将输入法切换成英文才能操作。如果操作完需要进入 insert 模式继续输入中文又要再切换一次输入法。

陈斌提供了一个完美的解决方案

  • 只有在 insert 模式才会输入中文,所以在 normal 模式切换到中文输入法时应该自动进入 insert 模式。
  • 在 insert 模式切换输入法保持模式不变。
  • 在 insert 模式按 ESC 键进入 normal 模式应该强制使用英文输入法。
    下面的各个方式不一定按照上面的思路实现,一般实现的是 insert 切换到 ESC 时强制切换到英文输入法,从 normal 切换回 insert 模式时可以切回之前的输入法。

原生 Vim

主体是使用 lyokha/vim-xkbswitch 库做切换,不同系统环境依赖了不同的输入法切换库,可以在这里查看系统需要的输入法切换库。

MacOS(测试可用)

六步走安装

  1. git clone https://github.com/myshov/xkbswitch-macosx
  2. cp xkbswitch-macosx/bin/xkbswitch /usr/local/bin
  3. git clone https://github.com/myshov/libxkbswitch-macosx
  4. cp libxkbswitch-macosx/bin/libxkbswitch.dylib /usr/local/lib/
  5. install plugin: https://github.com/lyokha/vim-xkbswitch
  6. Vimrc 上配置 let g:XkbSwitchEnabled = 1

Win

切换需要用到美式键盘,如果你用 Win10,可通过以下方式添加:
设置 --> 时间和语言 --> 语言 --> 添加首选的语言,选择“英语(美国)”
使用 DeXP/xkb-switch-win 作为输入法切换库

Linux

使用 lyokha/g3kb-switch 作为输入法切换库

IdeaVim 插件(测试可用)

Idea 插件地址:https://plugins.jetbrains.com/plugin/9615-ideavimextension
项目仓库地址:https://github.com/hadix-lin/ideavim_extension
在 ~/.ideavimrc 下加上

set keep-english-in-normal
set keep-english-in-normal-and-restore-in-insert

更多配置方式见项目仓库 README。

VSCode Vim 插件(测试可用)

VSCode 的这个 Vim 插件自带了输入法切换能力。
配置介绍 https://github.com/VSCodeVim/Vim#input-method

对于 Mac 和 Win 需要安装一个命令。见 https://github.com/daipeihust/im-select

然后按上图配置好即可。

这个只是在切换回 normal 模式时使用英文输入法。

参考

https://zhuanlan.zhihu.com/p/49411224
https://www.zhihu.com/question/25744174/answer/506519877