小狼毫(Rime)配置生效原理
经朋友种草之后,确实感觉小狼毫/Rime(官网下载链接)是一个很不错的输入法框架,尤其在使用熟练与理解其运行逻辑之后,其高度灵活的配置自由度,及其对插件引擎的支持能力(例如lua),可以非常灵活的打造属于自己的输入法方案,实现真正的定制化。
本人比较笨,也比较懒(由于小狼毫官方制定指南为繁体字页面,我有点密恐,一直抗拒去看官方文档。后来证明,相对于在网上四处看别人给的配置文本,亲自看官方文档才是最高效的上手方式,好尴尬),在折腾的过程中,好久一段时间都不得要领,只会照着网上给定的配置文本复制粘贴,有时候还莫名其妙不起作用,甚至程序异常。
经过一段时间的摸索,终于理解了小狼毫这个程序的配置生效逻辑,其实理解了这个逻辑,在去配置自己的输入法,就有主动权。你在网上看别人给出的配置文本,也能看得会,看得懂,甚至能看出是否有错误,以及如何做出一定的修改以满足自己的需求。
下面关于所谓的小狼毫的配置生效逻辑进行一个说明(以wubi_pinyin输入法为例,其它输入法雷同),有不对的地方,欢迎指正,共勉学习。
我们今天所涉及到的内容,主要有两个文件夹,如下图所示,用户文件夹和程序文件夹。
其中程序文件夹下,我们将主要关注data文件夹下的文档;
其中用户文件夹下,我们将关注此文件夹下的文档以及其子文件夹build下的文档;
在程序文件夹下的yaml文档,其中各项配置参数都是程序提供的原始配置值,可以确保在最糟糕的情况下使用此配置时,程序可以运行。我们称这里的配置为 S(source)配置,这里的文件一般是不需要修改的。
在用户文件夹下子文件夹build文件内,也有一套与程序文件夹下类似的同名yaml文档,此处的配置决定的程序 运行的实际效果,是融合了用户自定义配置之后的配置,我们称这里的配置为 T(target)配置,这里的文件是运行重新部署之后生成的配置文件。
也就是说每次用户修改了配置之后,都需要运行重新部署,才能将所做的修改整合进 T 配置中,以使其生效。
在用户文件夹下,还有一些带有custom字样的yaml文档或者txt文档,这些文档的作用是提供一个接口,使用户可以对程序的运行效果进行定制,我们称些处的配置为 C(custom)配置。
有了 S T C 三种配置之后,在运行重新部署之后,他们之间是如何相互起作用的呢?(这里是重点)
有时候文字费劲儿且效果不佳,直接看下面的图吧。
对于上图我相信大家可以轻易理解小狼毫的三个配置文件在运行重新部署后的相互作用关系。这些关系中,最核心的点在于打补丁这个动作,是这个动作将我们个性化的配置融合到了build文件夹下的配置文档中,并影响了程序的实际运行效果。
下图是在没有 C 配置下 wubi_pinyin.custom.yaml 文档时,部署程序所生成的 T 配置下的 wubi_pinyin.schema.yaml 文档中的engine信息。(yaml文档的结构和语法此处不展开讨论)
可以看到engine结构下有processors, segmentors,translators三个子结构,以及各自的对应的内容。
我们在 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 内的补丁生效方式,与上文所讲一致,此处不再展开。
致此,此文要讲的内容基本完成。如果有错误,还请评论区指出,不胜感激。
小狼毫(Rime)配置生效原理相关推荐
- RIME小狼毫自用配置
RIME小狼毫自用配置 指定输入法, 候选词数 设置横排候选测, 更换皮肤 解决` 提示筆畫的问题 切换中英文标点 指定输入法, 候选词数 打开用户文件夹 新建default.custom.yaml ...
- 小狼毫Rime输入法简单配置指南
目录 为什么选择它?----Rime 一.下载 二.安装 1.官方安装包下载 2.安装选择 3.安装完成 三.配置小狼毫 语言栏设置 1.简体设置 2.输入框配置 3.字符配置 4.英文输入库配置 为 ...
- 小狼毫(RIME)输入法入门使用详细教程
官网 https://rime.im 百度云链接 链接永久有效,有window版,mac版,安卓apk,教程小视频 链接:https://pan.baidu.com/s/1a-z1wYwyZ50A6x ...
- 通过小狼毫/rime输入法在飞书中输入Tex/Latex公式的效果
下面展示一个通过小狼毫输入法(rime输入法)在飞书文档中输入Tex公式(latex公式)的使用效果
- 通过小狼毫/rime输入法在飞书中输入Tex/Latex公式的效果-2
下面展示一个通过小狼毫输入法(rime输入法)在飞书文档中输入Tex公式(latex公式)的使用效果
- 小狼毫 Rime 输入方案 设置
MAC OS 的小狼毫,用了一段时间,感觉非常不错. 升级也比较频繁,但相对比 Windows,修改输入方案默认没有自带UI,需要手工修改配置文件,有点烦. 这次升级后,又要去官网 WIKI 上找配置 ...
- Linux rime小狼毫输入法 配置
系统:LXD-Ubuntu-KDE 输入法方案:fcitx+rime 不知为何,使用 fcitx-config 面板配置这rime输入法,配置文件一直无法保存(保存后,再次打开配置面板,配置又变回默认 ...
- 小狼毫输入法配置双拼输入
将下载下来的双拼相关的文件拷贝到 "程序文件夹"/data目录下 (例如:D:\Rime\weasel-0.14.3\data) 然后重新部署服务
- 〖小狼毫〗配置后的效果
一.实现的功能 英文单词输入 日期时间类型输入(包括年.月.几点几分) 表情及颜文字输入 自定义短语输入 二.效果图gif动图 英文单词输入 日期时间类型输入(包括年.月.几点几分) 表情及颜文字输入 ...
最新文章
- 接受返回值 server sql_SQL,何必在忆之一(基础篇)
- 喵哈哈村的魔法考试 Round #5 (Div.2) C
- Understanding Quaternions 中文翻译《理解四元数》
- ASP.NET MVC3 部署的前期工作
- 语言题库体型判断问题_1000道Python题库系列分享20(43道填空与判断题)
- [转]微服务轮子项目(27) -MySQL 主从复制、主从切换、主主复制
- linux oom-killer
- 数据结构(C语言版 第2版)课后习题答案全集 严蔚敏
- 讯飞tts语音引擎_讯飞iFLYOS语音让家居产品更智能
- PyTorch学习记录——PyTorch生态
- 天才小毒妃 第961章 她不后悔就够了
- IP-guard项目实施前情况调查表
- (35)代码优化以后的运行结果
- k-means和GMM的区别
- 牛顿-莱布尼茨公式的运用
- 分治算法,动态规划算法和贪心算法的区别和联系
- 【踩坑专栏】 Cannot access aliyun () in offline mode and the artifact sso-demo:parent:pom:1.0-SNAPSHOT has
- 朗诵素材-《少年正是读书时》(两角色主持朗诵)
- JavaScript模板字符串传参数
- nativeQuery=true是什么意思?
热门文章
- opensuse15.1 安装nvidia显卡驱动(yast一键安装)
- 黑马程序员 面向对象总结2
- 机器人工程终身学习和工作计划-2022-
- 软考之数字签名 对称加密 非对称加密
- java tcp dtu_【分享】使用有人DTU设备接入OneNet(基于TCP透传)
- 海康工业相机参数设置(python)
- 十进制转二进制(C++)
- 与计算机互动大学英语,【2017年整理】基于与网络和计算机的大学英语教学模式.ppt...
- RabbitMQ的简单使用
- Unity3D在Project中添加Favorites快速搜索标签