article_image

注意:使用本文提供的自动化工具前,请确保电脑上已经安装有 Python 3。另外,使用 LaunchBar 版动作前,请先将 default.py 和 remove.py 中的词典路径改成你的实际路径Keyboard Maestro 版则修改 Macro 中的路径。 20230802更新:考虑到 Rime 不能添加多行短语,我写了一个辅助方案,发布在 UNTAG 会员栏目的第三十七期

如果说算法是输入法的骨架,词典(词库)就是输入法的血肉。健康的输入法,应当达到骨骼与血肉的平衡。

传统输入法往往预设庞大字库,机体容易僵硬,逐渐变成拖着大肚腩爬行的怪物;现代输入法通常骨骼精奇,可惜常常越俎代庖,对遣词造句干预过多。像 Rime 这样的开源输入法实属徐来清风,既能自动记住输入习惯、手动配置在自定义词典,又允许删除任何不再需要的词语。

当然,正如同身体锻炼,健康的输入法也是三分天注定,七分靠打拼。学会使用 Rime 的词典,才能发挥一款输入法的实力。

我用 Rime 的理由,已经在 《为什么我在 2022 年还坚持使用 Rime 输入法》 中写过,实在感兴趣的可以阅读前文。

Rime 中的两种词典:自动与手动

与“自动记忆”和“手动配置”相对对应,Rime 的词典也分为两类,一种是根据用户输入习惯自动存储,无法手动编辑,通常以 userdb 结尾(在 macOS 中呈现为文件夹);另一类则需要手动输入,可以自由更改,包括 ‌某某输入法.dic.yamlcustom_phrase.txt 两种文件格式。

Alt text
Rime 中的各种词典文件

通常,这些字典文件位于 ~/Library/Rime/ 文件夹下,根据 Rime 的版本不同可能会再往里藏一个文件夹层级。一般来说,userdb 类型的文件无需改动(似乎也没有办法直接编辑),如果你想删掉被 Rime 自动记住的词语,可以先打出该词语——仅仅在候选词列表中打出,不要“上屏”——选中它后按下 ‌Fn-⇧Shift-D,即可让 Rime 忘掉它。

我偶尔也会打出一些错别字,一旦发现,马上就会将其抹掉,避免以后再犯。如今很多输入法有个糟糕的倾向,即“众口铄金”,大家都打错的词,它就将错就错、把错别字也推荐给你,甚至苹果原生输入法也喜欢干这种事情,多年来一如既往地向我推荐“一如继往”1,这根本就是在怂恿大家使用错别字——而且,你没有“被遗忘权”。

Alt text
苹果原生输入法至今还留有错别字

不过,Rime 的删除方式仅对 userdb 中的词语生效,自定义词典有另一套使用方式,我也为它们制作了相应的自动化动作,以便简化这些词典的管理。

两种自定义词典:txt 和 yaml

Rime 中有两种用户自定义词典,分别是 custom_phrase.txt‌某某输入法.dic.yaml。在用户的层面看,前者更简单直白,本文也推荐使用 custom_phrase.txt。其中的数据非常简单,每行都是 词组 输入语 的形式(中间是制表符),和 macOS 系统自带的文本替换(Text)类似。

Alt text
Rime 自定义词典和文本替换的格式类似

yaml 则多了一些配置代码,随后的词语数据基本和 txt 文件通用2,你可以直接在两类文件之间相互拷贝。利用一些巧劲儿,还可以把其他输入工具里的用户词典提取到 Rime 中,包括之前提到的文本替换。

日常打字时,两种用户自定义词典的差别较小,主要体现在一些细节上。例如,txt 版的词语不用双击元音字母就能输入,像是输入 Excel,yaml 就要按两次 e,有时候脑筋会转不过弯;另外,txt 中的短语更靠谱,往往添加什么就能打出什么,而 yaml 文件中经常有词语发生冲突、打不出来。

Alt text
txt(下)版字典的输入更直白,不需要双写元音字母

不过 yaml 文件也有其优点,无需打完整串输入码,可以实现所谓的“首字母输入”,如果经常和英文词组打交道,yaml 更合适。另外,yaml 带有模块化设计的味道,不仅可以匹配特定输入方案,还可以“外挂”词库,适合同时使用多种输入方案或者跨学科工作的专业人士。比方说,张君原先使用双拼,最近正在苦练五笔,他可能需要为两种截然不同的输入法分开配置词典;再如,李君是一位专利代理师,可能需要分开维护法律词库、政策词库和技术词库等多个文件。他俩在 yaml 上花一点力气尚有必要,对于多数读者而言,yaml 的性价比还是低了一些。

导入文本替换到 Rime

不少用户可能已经在系统文本替换中添加过一些短语,可以在 macOS 的键盘设置中将其拖出——就是字面意思,比如拖到桌面——生成“Text Substitutions.plist”文件,稍后加工为 Rime 可以识读的格式。

Alt text
文本替换中的数据可以导出

我本来可以做一个自动化工具,以便诸君将 Text Substitutions.plist 文件直接转换为 Rime 词典格式,但苦于 macOS 的命令行工具 年久失修、连换行都不能处理,与其让诸位安装一个命令行工具,不如直接用支持正则表达式的文本编辑器来处理更简单(比如免费版的 BBEdit)。

首先在终端(Terminal)中提取半成品数据。假设现在 Text Substitutions.plist 文件位于桌面,你可以使用以下命令从中获取输入语和词语数据:

grep string ~/Desktop/Text\ Substitutions.plist
Alt text
通过命令行获取半成品数据

随后,选择一款带有正则表达式替换功能的编辑器,图示为 BBEdit,其免费版已经提供了本文所需功能。首先通过 <string>(.*)<\/string>\n<string>(.*)<\/string> 提取出所需数据,再用 \2\t\1 将它们排成 Rime 所需的 词组 输入语 形式。

Alt text
用 BBEdit 整理词典数据

从其他输入法迁移过来的读者,只要能够导出原输入法的用户词典,总有办法将其导入 Rime。只需整理出 词组 输入语 的格式,就可以粘贴到 Rime 自定义词典文件的最下方。

通过自动化工具简化词典管理

不论把词典保存在 txt 文件还是 yaml 文件中,每次添加新词时还要编辑源文件,显然不方便(何况 Rime 的词典文件还保存在隐藏文件夹 Libraray 中)。在 Rime 中,由于中文词语会随着输入习惯而被自动记忆,所以自定义词典中主要是外文和中英复合的词语,比如 macOSISOU盘,这些词语 Rime 的中文输入方案记不住,手打又要顾及大小写,更适合直接存入自定义词典。

词典必然会跟随用户一起成长,添加新词无法避免。单单是读一篇文章、听一场讲座,就可能学会一堆新词语(尤其是专有名词和各种缩写),这些词好不好3另说,最起码,如果可能要重复输入它们,那就有必要将其存入自定义词典。为了减少打开源文件的操作,我做了一系列自动化添加/删除词语的操作。

提醒一下,进行本节任何一种修改操作后,都需要重新部署 Rime 以使新词典生效,可以使用快捷键 ⌃Control-‌⌥Option-~~ 键即 ‌⎋Esc 键下方的按键)或在菜单栏 Rime 图标中选择“Depoly”。

Alt text
重新部署 Rime

下文所展示的截图主要来自 LaunchBar,其中代码可以改到其他自动化工具中。删除词条的动作比较容易维护,我也提供了 Keyboard Maestro 版。

注意:使用自动化动作前,请将脚本或 Macro 中的词条文件地址改为您实际的存储位置。另,为维护方便,我仅提供 txt 版本的动作。

捕获生词

主要针对英文单词,捕获后可以通过输入全拼来打出该单词,主要是省去大小写切换的麻烦,例如输入 ‌ffmpeg 打出 FFmpeg(一款视频处理工具)。更常用的单词还可以通过下一节的手动输入方式来设置缩写,进一步简化输入。

Alt text
捕获“FFmpeg”

遇到一些常见的品牌时,我也会将其捕获到自定义词典中,下次再输入时就方便不少。各种大小写夹杂的品牌名、个性独特的网民,都可以通过“捕获生词”添加到用户词典。具体方法是,看到一个生词,比如 Osprey(一个美国背包品牌),就可以选中它、通过 Instant Send 发送到 LaunchBar 并运行,记得重新部署一下 Rime。看到部署成功的通知提示后,再打一下 osprey,首字母大写的 Osprey 就出现在了输入界面。

Alt text
打出 Osprey

捕获生词的动作多用于捕获英文专有名词、缩写,但是不适用于词组,因为后者含有空格、没办法正常解析。词组可以通过下文的手动输入方式收入自定义词典。

LaunchBar 动作下载

手动输入

虽说捕获用起来方便,可惜基本只适用于英文,有些词条还是得用户自己添加,比如,>_< o_O 之类的颜文字,👈 🌝 👈 等常用 Emoji 表情,U盘 T恤 等中英文组合词组,.com.cn 等域名后缀……手动输入就是为了给这些词语提供兜底方案,以添加 T恤 这一词条为例,其使用方式是:

  1. 启动动作,先输入词语,比如 T恤,按一下空格空开
  2. 接着录入输入码,接上上一条,可以根据拼音设成 txu
  3. 重新部署鼠须管
Alt text
手动添加“T恤”

现在再用 Rime 输入 txu 试试,就能打出 T恤。不依靠词典的话,这类中英文复合词就显得特别麻烦,还有 U盘A类执照B型血……遇到它们时难免卡一下。对了,MP3MP4 这类英文数字复合词也可以加入自定义词典,我的做法是将其英文部分作为输入语。稍有遗憾的是,A4纸W3C 这类奥利奥夹心造型的词语,我至今没想出合适的输入方式。

LaunchBar 动作下载

删除词条

有时会发生重复添加或输错词语的情况,也可以通过 LaunchBar 快速删除。这个动作用起来是这样的:

  1. 启动动作,按空格,输入词条关键词
  2. 从 LaunchBar 列出来的匹配词条中选择一个,按下回车
  3. 选中的词条即被删除,LaunchBar 还会发送一条通知,显示刚才删除了哪个词条
  4. 同样,记得重新部署

这个动作也可以作为一个用户词语检索工具4,有时我自己都不确定一个生词以前有没有添加过,就会启动 LaunchBar 先搜一搜,没有的话再加进去——只是要小心,别手抖删除原有词条,如果你真的不幸把它删了,可以看看刚刚发出的通知,手动把被删的词语加回去……某种程度上,通知提升了整个动作的“工程安全性”。

Alt text
LaunchBar 和 Keyboard Maestro 版动作都可以检索并删除词语

在没有输入任何关键词的时候,删除词条的动作会显示词典中最后 5 个词语,方便检查、删除最近添加的内容。很多错误是粗心所致(比如选词时少划了最后两个字母),往往刚添加完不久就会猛然意识到,这时候就用不着搜索,可以直奔最近词语,将其删掉。

Alt text
没有输入时也可以检查最近添加的词条

备份词典数据

Rime 的所有字典文件都对用户开放,备份工作说破了就是复制粘贴。Keyboard Maestro、Hazel 等自动化工具都有复制功能,你可以设置一个定时动作,将其上传到云端或者外置硬盘。

我也写了一个简单的通用脚本,适用于任何支持 Shell 的自动化工具,可以将整个 Rime 文件夹备份到任意位置,以备份到 iCloud 中的文档文件夹为例,代码如下(我的电脑名是 apple,你可能需要修改):

rsync -av /Users/apple/Library/Rime/ /Users/apple/Documents/Rime/ --delete

Rime 文件夹体积非常小巧,没有巨大的缓存文件,我在五六年时间里不过囤积 13.4 MB 的数据,完全可以整个文件夹一起备份,省心省力。

Alt text
Rime 的用户数据体积非常小巧

小结

刨去两种词典,Rime 的默认词库简直小得可怜,以至于在 OS X 时代,它还因为资源占用小而受到进阶用户的追捧。必须承认,随着硬件性能踩着摩尔的肩头一路高歌猛进,Rime 因词库小而“唯快不破”的优势已然不复。

现在的 Rime,是为这种人准备的:他们愿意忍受输入法最初打不出“唯快不破”,愿意花上几个月教会输入法日常用语,愿意花上半年甚至更久去培育一款输入法,让它打出、且仅打出自己需要的词语,成长为“张律师的输入法”“李医生的输入法”或“王编辑的输入法”,成为手指乃至大脑的延伸。


  1. 因为这茬,我已经五年没用过原生输入法,写这篇文章时测试了一些,发现它仍不改错。
  2. 除了带空格的词语,这属于 txt 专用。
  3. 比如,马斯克特别反对缩写词,认为它们很难看懂。
  4. 仅限 LaunchBar 版有本功能。

author_avatar

Lawyer, macOS/iOS Automation Amateur