为什么linux上的中文输入法如此稀缺?
Windows 上的输入法,太多大同小异的了。有一些就是旧团队出走的人,把旧代码换个皮做出来的“新东西”。还有就是并购后,把底层引擎换成一样的(例如 QQ 输入法)。你换来换去,不也是换了个寂寞吗。
这些商业输入法当然存在核心优势,服务端技术是很有竞争力的。统计语言模型、云端词库等。这是 Linux 上的输入法没做的部分(不是做不好,而是压根没做)。
但 Linux 上的输入法在客户端架构上很有特色。例如众所周知的 Fcitx,其本质并非输入法,而是一个输入框架。它负责为各方(你、系统环境、应用程序)协调“输入”,并不负责把输入映射成字符。具体如何映射成字符,是输入引擎干的。但你说它并非输入法也不准确,因为它内置了拼音、五笔等基本的输入引擎。
这就是为什么搜狗支持 Linux 的时候,它依赖 Fcitx。因为搜狗在 Linux 上就是一个 Fcitx 的输入引擎。如何集成输入这种脏活累活是让 Fcitx 干的。
如果说输入框架这样设计还能理解,避免每一个输入法都重复造轮子嘛。输入引擎方面有一个叫 Rime 的项目,它又可以是 Fcitx 内部的一个抽象层,并且抽象得更加离谱。Rime 可以基于配置,自建输入方案。例如全拼音、各种双拼,都是用一堆 YAML 配置凑出来的。
例如朙月拼音,核心就是一堆配置文件:

由于 Rime 高度抽象,配置文件基本上玩成了一种具备编程性的 DSL。你可以:
- 定义自己的编码规则(如形码、音形码、英文缩写转长句)。
- 组合不同的 translators(码表翻译器 + 脚本翻译器 + Lua 扩展)。
- 用 filters 加自定义排序、Emoji、动态短语。
- 甚至混合多种方案(反查仓颉、英文混输等)。
所以很多项目自称“输入法”,但看上去只是一堆配置文件。从功能上说(字符映射),它们确实是新的输入法。在技术概念上,它们就是 Rime 的方案配置。
这也是为什么 Rime 添加到 Fcitx 后,产生了让很多人不理解的角色定位问题。因为 Fcitx 原生用法是你切换拼音,就是激活拼音输入引擎,切换英文就是激活英文输入引擎。但 Rime 这个东西不需要这样做了,它脱离了某种专精的输入方案,把自己抽象成了一种方案框架。这就造成了框架套框架的场景,Rime 自己内部的活把其它引擎取代了。
所以你以为的 Windows 输入法遍地开花,实则千篇一律。广告、云控,不堪其扰。你以为的 Linux 没几个输入法,但实际上这些软件是高度抽象的架构设计。它们的定位甚至有些类似于「键盘」,用同一个东西可以打出各种文字,甚至从未见过的反人类的映射方案。