小狼毫(Rime)配置打补丁原理

本文详细介绍了Rime输入法框架中的小狼毫配置逻辑,包括源配置(S)、目标配置(T)和自定义配置(C)三者的交互关系。通过实例展示了如何使用C配置对S配置进行补丁操作,生成T配置,并通过三种不同的补丁方法实现对输入法的个性化定制。此外,文中还强调了阅读官方文档的重要性,以及理解配置生效逻辑对于有效配置小狼毫的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

教程目录:rime中州韵小狼毫须鼠管安装配置教程 保姆级教程 100+增强功能配置教程

经朋友种草之后,确实感觉小狼毫/Rime(官网下载链接)是一个很不错的输入法框架,尤其在使用熟练与理解其运行逻辑之后,其高度灵活的配置自由度,及其对插件引擎的支持能力(例如lua),可以非常灵活的打造属于自己的输入法方案,实现真正的定制化。

本人比较笨,也比较懒(由于小狼毫官方制定指南为繁体字页面,我有点密恐,一直抗拒去看官方文档。后来证明,相对于在网上四处看别人给的配置文本,亲自看官方文档才是最高效的上手方式,好尴尬),在折腾的过程中,好久一段时间都不得要领,只会照着网上给定的配置文本复制粘贴,有时候还莫名其妙不起作用,甚至程序异常。

经过一段时间的摸索,终于理解了小狼毫这个程序的配置生效逻辑,其实理解了这个逻辑,在去配置自己的输入法,就有主动权。你在网上看别人给出的配置文本,也能看得会,看得懂,甚至能看出是否有错误,以及如何做出一定的修改以满足自己的需求。

下面关于所谓的小狼毫的配置生效逻辑进行一个说明(以wubi_pinyin输入法为例,其它输入法雷同),有不对的地方,欢迎指正,共勉学习。

我们今天所涉及到的内容,主要有两个文件夹,如下图所示,用户文件夹程序文件夹
小狼毫/Rime配置文件夹
其中程序文件夹下,我们将主要关注data文件夹下的文档;
程序文件夹下的data文件夹
其中用户文件夹下,我们将关注此文件夹下的文档以及其子文件夹build下的文档;
用户文件夹及其子文件夹build文件夹
程序文件夹下的yaml文档,其中各项配置参数都是程序提供的原始配置值,可以确保在最糟糕的情况下使用此配置时,程序可以运行。我们称这里的配置为 S(source)配置,这里的文件一般是不需要修改的。

用户文件夹下子文件夹build文件内,也有一套与程序文件夹下类似的同名yaml文档,此处的配置决定的程序 运行的实际效果,是融合了用户自定义配置之后的配置,我们称这里的配置为 T(target)配置,这里的文件是运行重新部署之后生成的配置文件。
也就是说每次用户修改了配置之后,都需要运行重新部署,才能将所做的修改整合进 T 配置中,以使其生效。
default配置和输入法方案配置
用户文件夹下,还有一些带有custom字样的yaml文档或者txt文档,这些文档的作用是提供一个接口,使用户可以对程序的运行效果进行定制,我们称些处的配置为 C(custom)配置。
用户文件夹下用于定制的custom文档
有了 S T C 三种配置之后,在运行重新部署之后,他们之间是如何相互起作用的呢?(这里是重点
有时候文字费劲儿且效果不佳,直接看下面的图吧。
小狼毫配置生效过程
感谢 在这里插入图片描述这位网友的重新整理,以下是泳道图风格的流程图:
泳道图版本

对于上图我相信大家可以轻易理解小狼毫的三个配置文件在运行重新部署后的相互作用关系。这些关系中,最核心的点在于打补丁这个动作,是这个动作将我们个性化的配置融合到了build文件夹下的配置文档中,并影响了程序的实际运行效果。

下图是在没有 C 配置下 wubi_pinyin.custom.yaml 文档时,部署程序所生成的 T 配置下的 wubi_pinyin.schema.yaml 文档中的engine信息。(yaml文档的结构和语法此处不展开讨论)
可以看到engine结构下有processors, segmentors,translators三个子结构,以及各自的对应的内容。
wubi_pinyin.schema.yaml
我们在 C 文件夹下创建一个wubi_pinyin.custom.yaml文档(可以复制一个现成的yaml文档来改,也可以创建一个txt文件,然后改后缀,需要注意编码格式为UTF-8),输入以下内容(注意:每行缩进两个空格,且短横线后有一空格)。
在这里插入图片描述
保存 wubi_pinyin.custom.yaml 文档后运行重新部署,然后再打开 T 配置下的 wubi_pinyin.schema.yaml 观察,我们会看到如下图所示的engine内容,我们看到了engine的内容变成了我们在 C 配置下 wubi_pinyin.custom.yaml 文档内所定义的内容。
在这里插入图片描述
关闭T 配置下的 wubi_pinyin.schema.yaml文档,现在我们修改 C 配置下 wubi_pinyin.custom.yaml 文档的内容如下。
在这里插入图片描述
保存 wubi_pinyin.custom.yaml 文档后运行重新部署,我们应该可以发现 T 配置下的 wubi_pinyin.schema.yaml 文档的内容变成了如下所示内容。
在这里插入图片描述
我们发现,T 配置下的 wubi_pinyin.schema.yaml 文档中的engine结构,我们只修改了其translators子结构中的内容,processors和segmentors的内容都没有改变。

再次关闭T 配置下的 wubi_pinyin.schema.yaml文档,现在我们修改 C 配置下 wubi_pinyin.custom.yaml 文档的内容如下。
在这里插入图片描述
保存 wubi_pinyin.custom.yaml 文档后运行重新部署,我们应该可以发现 T 配置下的 wubi_pinyin.schema.yaml 文档的内容变成了如下所示内容。
在这里插入图片描述
我们发现,T 配置下的 wubi_pinyin.schema.yaml 文档中的engine结构,我们在保持其当前内容的基础上,在其子节点translators下增加了新的内容(图中箭头所指)

至此,我们通过对比以上图中红框内的差异,我们得知,通过 C 配置来给 S 配置打补丁,生成 T 配置,我们有三种方法,分别如下:

方法1:
patch:
  engine:
    translators:
      - table_translator@custom_phrase
方法2:
patch:
  engine/translators:
    - table_translator@custom_phrase
方法3:
patch:
  engine/translators/+:
    - table_translator@custom_phrase

方法1,对于整个engine结构进行了替换。
方法2,对于指定的子结构engine/translators进行了替换。
方法3,对于指定的子结构engine/translators追加了新的内容。

如果你想整体定义一个结构体,可以使用方法 1 重新完整给出所关注结构的新的定义值。
如果我们只想变动某一个结构下指定子结构的值,可以使用方法 2 指定我们所关注的子结构并对其进行修改,这样避免了该结构的其它部分的内容受影响而变动,这是比较明智的操作。
如果我们希望在某一个结构当前状态下为其增加一些内容,可以使用方法 3 指定具体的结构节点,并指定其要增加的值即可。

需要说明的是,在 C 文件夹下 wubi_pinyin.custom.yaml 文档内的补丁内容,只有在 patch 这个结构下的内容,才会有补丁效果,所以大家会看到在输入法同名的custom.yaml文档中,总会存在一个 patch 的根结构。

default.custom.yaml 内的补丁生效方式,与上文所讲一致,此处不再展开。

致此,此文要讲的内容基本完成。如果有错误,还请评论区指出,不胜感激。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

团圆吧

1 分钱,求鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值