在 Vim 里更好地使用中文输入法

最近修改于 2021-05-08

最近看到 jdhao 更新了两篇博文,总结了几种在 Vim 里切换输入法和使用 Vim 自带的补全输入中文的方法。刚好这段时间我也在折腾在 Vim 下的中文输入,在此做一个总结。

2021-05-08更新

最近我又折腾了一下 emacs,用上了 emacs-rime,非常丝滑,比文中我所提到的所有 vim 中的方案都要好。设置好中英文的触发条件,改变了我对中英文混输“效率低下”的看法。看来有时折腾不同工具,也有别样的收获。如果你也想尝试一下 emacs(可以使用 evil 来保持 vim 键位),不妨试一试。

1. fcitx.vim 或者 vim-barbaric

fcitx.vimvim-barbaric 是两个 Vim 插件,都可以在离开 insert 模式后自动切换为英文输入,再次进入 insert 模式后,恢复上次的输入状态。如果是在 Linux 环境下使用的话,两者安装之后基本都是开箱即用,而在 Windows 和 macOS 环境下,vim-barbaric 需要安装额外的依赖,并且需要考虑输入法是否支持,在 README 里有详细的说明。在我的机器上,vim-barbaric 要比 fcitx.vim 对 Vim 启动速度的影响更小,其他的使用体验基本一致。

2. ZFVimIM

ZFVimIM 是利用 Vim 的内置补全实现的输入法,不依赖外部的输入法,支持云词库,本地词库需要有词库文件的支持,也可以很方便的自己制作词库。作者也给出了几个拼音词库和五笔词库。我自己制作了一份小鹤音形的词库,仓库地址在这里

zfvimim_xhup

而且小鹤音形、五笔这类输入法重码较少,大部分编码都只对应一个候选字/词,拼音词库则是一个编码对应多个字/词,如果词库很大,不可避免地需要在诸多候选词里选词。所以使用形码输入法,搭配 ZFVimIM 的体验会更好。云词库我还没有体验,可以参照开头 jdhao 的那两篇博文里的内容。

ZFVimIM 默认触发的快捷键是 ;; ,我经常在 Vim 里使用 f/F 进行行内查找,查找结果的下一个的快捷键是 ;,由于 Vim 会在按下分号时等待是否会有第二个分号按下,如果我只想要跳转到下一个 f/F 的结果,Vim 就会“呆”一会儿才会响应这个动作。目前没有发现 ZFVimIM 有更改触发快捷键的设置选项,我只好修改源码,把这个快捷键改了。

整体来说,ZFVimIM 的使用体验还可以,我也会在日常使用中,继续完善小鹤音形的词库。如果你也是使用小鹤音形的 Vim 用户,欢迎 PR!

3. fcitx5 自定义触发按键

这一段更新于 2021-03-20,目前来看,这是个人觉得体验最好的方法,而且不依赖其他的插件,全局可用。唯一的缺陷就是很多输入法不支持这样设置,如果你也用 fcitx5,可以尝试看看。

我在 Emacs 群里看到一位群友的发言得到启发。那位群友大概的意思是,输入法的每个输入方案对应一个独立的快捷键,而不是像现在大部分的输入法那样,采用一个快捷键,循环选择可选输入方案。这样对于输入法的选择就是精准的,当我按下某个按键时,触发的一定是特定的输入法。这就像 Vim 里的 ESC ,按下去,一定会回到 normal 模式(如果你没有特别更改的话)。

我觉得这个方案挺符合我的输入习惯的。我在 fcitx5 里只使用了两个输入方案:默认的 en 和 中文的 rime。使用两个快捷键对应这两个输入方案,也不会增添额外的心智负担。

于是我在 fcitx5 的设置里找寻一番,果然发现了可以设置的选项。

如果你使用图形界面的 fcitx5 设置,在 Addon 里,选择 input method selector,里面配置一下 switch to N-th input method 的快捷键,可以添加多个。如果你使用配置文件,可以参考我的配置

以我的配置为例,我的第 0 个(第一个)输入方案是英文,设置为 ctrl + \,第 1 个(第二个)输入方案是 rime,设置为 alt + \,这样不管在什么情况下,当我按下 ctrl + \,选择的一定是英文输入,按下 alt + \,选择的一定是中文。这个按键配置不一定最高效,我也会慢慢摸索,找出最适合的快捷键。

Git checkout 的两个替代命令

A small tip when using vim macros