vim模式切换时的输入法处理

对于中文用户来说,vim有一个不便之处,就是:
Insert模式切换为Normal模式时,忘记了把输入法切换为英文,导致命令无法执行:-<

参考网上的办法,通过autocmd命令在进入和退出Insert状态时,对输入法进行切换,保证退出Insert状态时中文输入法无效即可。

Windows+WSL解决方案

这里需要一个能切换输入法的外部程序(其实是切换语言包,这就要求计算机必须安装中文和英文两个语言包)。可从这里下载:

1
2
3
cd /usr/local/bin
wget https://github.com/daipeihust/im-select/raw/master/im-select-win/out/x86/im-select.exe
chmod +x im-select.exe

然后编辑~/.vimrc,在适当的地方增加:

1
2
autocmd InsertLeave * :silent !im-select.exe 1033
autocmd InsertEnter * :silent !im-select.exe 2052

其中slient 表示执行完立即返回(静默执行),不再显示’Press Enter to Return’

linux解决方案

linux方案在centos8上通过,其它发行版可能略有区别。
linux不需要下载语言包切换软件,因为一般都自带,在CentOS中是ibus

在.vimrc适当的地方增加:

1
autocmd InsertLeave * :silent !ibus engine xkb:us::eng

解决!

缺憾

以上两种环境,输入法和vim运行在同一台机器上(im-select.exe其实是Windows程序,不过wsl下的linux可直接执行,微软给力)。如果是ssh这样的环境,输入法和vim在不同的机器上,就无能为力了。

gvim据说可以直接设置,没试过,下次试一下。