在Emacs内使用五笔输入法
由于工作的开发环境是Windows,我不得不在Windows电脑上使用Emacs。然而Emacs对Windows的支持并不完美,所以我在Windows Subsystem for Linux (WSL)里装了一个Arch Linux来完成一切不必在Windows里做的事情,其中就包括笔记。问题是,WSL现在并不支持直接使用宿主Windows的输入法,所以我没办法在WSL的Emacs里输入中文。虽然我可以在Windows里输入中文后再把它拷贝进WSL,但是……我相信我们可以做得比这更好一点。这让我回想起,我不是第一次尝试在WSL里使用Emacs,之前也是因为这个问题不好解决,所以作罢了。但是,Windows上的Emacs体验实在不够好,于是我打算再次尝试解决这个问题。
事实上Emacs自带输入法支持,包含不少中文输入方案,最常用的拼音就在其中,还有很多输入法甚至是我完全没听过的:首尾、四角号码、倚天注音、零一注音、仓颉……遗憾的是,并没有内置的五笔输入法,而自带的拼音输入法的使用体验又和现代的智能拼音输入法相差太多。于是打开搜索引擎1,果然,早已有人制作了更好用的中文输入法插件——pyim。最初,它只支持全拼输入,但是逐渐加入了双拼、五笔、仓颉,甚至还可以作为Rime的前端。我快速查看了它对五笔输入法的支持,并且惊喜地发现它支持98五笔输入法2。
只需要几行简单的配置代码就可以使用pyim:
(use-package pyim :ensure t
:config
(setq default-input-method "pyim"))
(use-package pyim-wbdict :ensure t
:config
(setq pyim-default-scheme 'wubi)
(pyim-wbdict-v98-enable))
试用的结果很让我意外:体验非常流畅,和我在Windows中使用的基于Rime的小狼毫输入法的体验几乎完全相同。一开始我还担心会不会有选字、词的优先级不同的问题,但是也许两边使用的是同一个码表,所以我几乎感觉不到任何差异3。我对这个结果非常满意。
在项目的提交历史上可以看到近两年来的提交几乎都是由作者tumashu贡献的,感谢他和所有其他维护者和参与者。
除了自带的98五笔输入法之外,pyim还可以作为Rime的前端使用。我在除WSL之外的其它平台(Windows,Linux,Android)使用的都是基于Rime的输入法,但是我却从来没有深入研究过它。要配置pyim和Rime一同工作,可能需要先了解一下它。暂且把这作为一个未来可能的工程吧,pyim内置的五笔输入法已经可以满足我绝大多数场景下的使用了。
更新:使用了pyim几天之后,我发现它比操作系统中的输入法更好的地方在于它和Emacs结合地更加紧密。当需要输入快捷键的时候,如果启用的是操作系统的输入法,那么它会捕获我输入的快捷键并试图将它们转化为中文。此时只能先暂时禁用操作系统的输入法,完成不需要输入法的操作后,再重新启用它。而如果使用的是Emacs内置的输入法,那么它会知道何时不需要自己工作,从而不需要反复禁用启用它。不过,在使用模态编辑时,它还是会在非输入模式下阻止对应的快捷键正常工作。不过,相比于操作系统内置的输入法会拦截一切的行为,它已经足够好了。在发现这一点后,我想在Emacs内我不会再使用操作系统自带的输入法了。
再次更新:通过自定义 pyim-english-input-switch-functions 实现了只在模态编辑的插入模式下启用pyim的效果。这就是使用Emacs最大的好处,一些微小的特性可以自己动手实现。