From b377e9b5980e057301aaf07c76229a9588bfea78 Mon Sep 17 00:00:00 2001 From: amzxyz Date: Wed, 24 Dec 2025 11:51:12 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BF=AE=E6=94=B9=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 ++++++- custom/patch方法论.md | 69 ++++++++++++++++++++++++++++++++- custom/wanxiang.custom.yaml | 2 +- custom/wanxiang_pro.custom.yaml | 2 +- 4 files changed, 82 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6f80945..a03e1bd 100644 --- a/README.md +++ b/README.md @@ -215,7 +215,7 @@ wanxiang.custom.yaml是对wanxiang.schema.yaml的补丁以此类推 schema,default,weasel,squirrel ``` -注意不要删除和变更每一个custom的表头。 +注意不要删除和变更每一个custom的表头。**关于如何patch,参见方案文件中custom目录携带的patch方法论** 更详细参照:[🚀 Rime 万象拼音输入方案 新手安装配置指南](https://docs.qq.com/doc/DQ0FqSXBmYVpWVFpy?rtkey=) @@ -341,12 +341,19 @@ wanxiang_lookup: #shijian:仅仅作为提示使用,编码已经写死,引导键可以在key_binder下修改前缀 #时间:osj 或者 /sj #日期:orq 或者 /rq +#日期差:orc 或者 /rc +#之所以单独列出是为了保证rq能直接数字上屏,这个功能需要输入数字,所以/rc这一步不能上屏, +#但我们把逻辑后置用来代表结束就能在结束时也使用数字上屏,使用方法: +#/rc26p,/rc26+,/rc26p= 随意一个都是加上这个差值,得到未来日期; +#/rc26-,/rc26o 随意一个都是减去这个差值,得到过去日期 +#以此实现了主键盘不用刻意按下shift,-=两个按键直接按,手机上也有op兼容可用,小键盘-+直接用 #农历:onl 或者 /nl #星期:oxq 或者 /xq #今年第几周:oww 或者 /ww #节气:ojq 或者 /jq #日期+时间:odt 或者 /dt #时间戳:ott 或者 /tt +#/utc查询热门城市UTC时间 #大写N日期:N20250315 或者N0312不带年 #节日:ojr 或者 /jr #问候模板:/day 或者 oday @@ -425,6 +432,9 @@ datetime_formats: **自动上屏:** 例如:三位、四位简码唯一时,自动上屏如`jjkw岌岌可危` `zmhu怎么回事` 。默认未开启,方案文件中`speller:`字段下取消注释这两句开启 `# auto_select: true # auto_select_pattern: ^[a-z]+/|^[a-df-zA-DF-Z]\w{3}|^e\w{4}` +**数字后自动半角:** 当中文状态输入数字的时候后面立即输入,。将自动转换为数字分割符,例如科学记数法1000,000 小数点 3.1415,如果你加入冒号:还可以优雅的输入时间12:30,当然你还可以双击输入的符号恢复全角符号的输出。但若你完全没有场景使用该功能,则可以通过patch,将其修改为commit +```punctuator/digit_separators: ",." > punctuator/digit_separators: commit``` + **错音错字提示:** 例如:输入`gei yu给予`,获得`jǐ yǔ`提示,此功能与全拼、双拼类型无关全部支持; @@ -469,7 +479,7 @@ datetime_formats: **中文无感造词Lua(仅PRO):** 在关闭调频的情况下,通过逐步选字选词的方式上屏将为你记录整段,且不会产生小碎片,所造词汇与db用户词是一回事,遵循用户词管理的相关逻辑,其中直接上屏不造词。相比按需造词更加不打断输入。 -**英文造词Lua:** 例如当输入scx的时候没有任何候选,此时可以追加\,```scx\```可以触发创建候选,但是有的时候我们想要任意编码进行英文造词,但是又有汉字在前面怎么办,本着一次不行就来两次的原则```nihao\\```末尾输入两个就可以了。然后空格上屏他就记录到了en.userdb,导出和同步与用户词逻辑一致。 +**英文造词Lua:** 例如当输入scx的时候没有任何候选,此时可以追加\,```scx\```可以触发创建候选,但是有的时候我们想要任意编码进行英文造词,但是又有汉字在前面怎么办,本着一次不行就来两次的原则```nihao\\```末尾输入两个就可以了。当然你也可以统一理解为按两下来触发强制英文候选。然后空格上屏他就记录到了en.userdb,导出和同步与用户词逻辑一致。 **用户词删除:** 使用Ctrl+del是rime系统删除用户词,就可以将用户词标记为c<=0,这在rime系统中就表现为不使用,假性删除。 diff --git a/custom/patch方法论.md b/custom/patch方法论.md index 9936152..2539b6d 100644 --- a/custom/patch方法论.md +++ b/custom/patch方法论.md @@ -1,12 +1,77 @@ # Rime YAML Custom Patch 语法指南 +patch是对方案文件前端配置文件做出补丁修改的最高权重配置文件 +权重排序为 custom.yaml > schema.yaml > default.yaml +我们修改方案功能要找准目标,例如修改wanxiang.schema.yaml则需要创建或者修改wanxiang.custom.yaml,dict.yaml是不能被patch的 +知道了以上信息我们还要了解custom的工作逻辑,在编译的时候,文件将先处理本文件内的引用如:引用__include: 补丁__patch: 跟随__append: +因此当schema中如果涉及到__include等这些方法,那么你看到的则不是最终形态,最终形态可以在build文件夹中看到他递归整理后的样子,而我们custom patch就是对这个最终形态进行修改,所以我们不能patch一个__include段落就是这个缘故。 +同样在custom文件中我们为了简化也可以使用__include这样的命令,比如我们预设文件中引用了关系到双拼类型的转写文件,同样是先将这个文件对应的段落拿进来,再用这个段落替换schema原本的段落从而完成修改。 +``` +patch: + speller/algebra: + __patch: + - wanxiang_algebra:/pro/自然码 + - wanxiang_algebra:/pro/直接辅助 +``` +知道了这些我们说一个极为重要的点:**一个custom文件顶层必须只有一个patch:** + +在YAML语法中同一个段落内的内容必须按层级进行两个空格的缩进,依次4个、6个缩进下去,因此写在patch:下面的内容也不例外,那么能不能顶层再写东西了?答案是可以 +但不能插入到patch内容的中间,这将会截断整个patch段落,你可以将这些内容放在文件的最后,不干扰patch段落,就像万象携带的模糊音等段落。 + +1、引用__include +``` +schema: + __include: xxx +``` +将顶层段落xxx下面的内容放在schema下面 + +``` +schema: +__include: xxx +``` +将顶层段落xxx下面的内容放在与schema同级的位置,注意看缩进的位置 + +``` + schema: + __include: wanxiang_algebra:/xxx +``` +将wanxiang_algebra.yaml文件中,顶层段落xxx下面的内容放在与schema下面 + +2、补丁__patch: 跟随__append: + +在单个段落下功能用法等同于__include,几乎没什么区别,但他可以叠加使用,如: +``` +patch: + speller/algebra: + __include: wanxiang_algebra:/mixed/通用派生规则 + __patch: wanxiang_algebra:/mixed/全拼 +``` +在使用了__include的下面我们可以继续使用__patch来让另一个段落继续跟过来,如果是两个__include摞起来是没用的 +但这也并非__patch自己完全的功劳,因为在转写段落跟随在一起的情况下我们还会在原段落加入跟随__append命令,形如: +``` +patch: + speller/algebra: + __include: wanxiang_algebra:/mixed/通用派生规则 + __patch: wanxiang_algebra:/mixed/全拼 +#另一个文件中 +mixed: + 全拼: + __append: + - xxx + - yyy +``` +patch可单用于段落整合,也可用于表与表之间的内容拼接,拼接时叠加__append:跟随命令使得两个表段落拼接到一起共同作为上层段落的值 + +知道了以上几个命令我们大概率能完成本文件内“最终态”的认识,在这个基础上我们开始了对schema打补丁的操作。 + +在打补丁前我们可以将段落的上层认为是本层的key键,本层及其下面所有认为是上层的值value,在这个概念的加持下,我们学习一些patch语法如下: ## 语法表格 | 操作类型 | 语法 | 说明 | | -------------- | ------------------------- | ---------------------------- | | **新增** | `key/+:` | 在某个列表中追加值,自动加在末尾 | -| **删除** | `key/-:`(不可用) | 从列表中移除值(不可用) | +| **删除** | `key/-:`(错误示例不可用) | 从列表中移除值(错误示例不可用) | | **全局替换** | `key: new_value` | 替换整个键的值 | | **部分替换** | `key/index/subkey: value` | 修改列表中的特定项,不影响其他项 | | **特定行替换** | engine/filters/@12 | 替换列表中第13行的值 | @@ -35,6 +100,8 @@ patch: # Rime YAML Patch 机制解析 +我们看到可以基于层级使用/依次代表下一层的路径,也可以:换行空两格代表,但是在patch中这个事情确整出了差别,如下: + ## 为什么 `menu/page_size: 10` 和 `menu: { page_size: 10 }` 结果不同? 在 **Rime YAML Patch 机制** 下,`menu/page_size: 10` 和 `menu: { page_size: 10 }` **看似等价**,但 **行为是不同的**,主要原因在于 **Patch 机制的覆盖策略**。 diff --git a/custom/wanxiang.custom.yaml b/custom/wanxiang.custom.yaml index 1c2731b..d354c2d 100644 --- a/custom/wanxiang.custom.yaml +++ b/custom/wanxiang.custom.yaml @@ -268,4 +268,4 @@ patch: - xlit/qwertyuiopasdfghjklzxcvbnm/QWWRRYUIIPASSFFHJJLZXXVBBM 14jian: __append: - - xlit/qwertyuiopasdfghjklzxcvbnm/QQEETTUUOOAADDGGJJLZZCCBBM + - xlit/qwertyuiopasdfghjklzxcvbnm/QQEETTUUOOAADDGGJJLZZCCBBM \ No newline at end of file diff --git a/custom/wanxiang_pro.custom.yaml b/custom/wanxiang_pro.custom.yaml index 1ef8e60..a00a365 100644 --- a/custom/wanxiang_pro.custom.yaml +++ b/custom/wanxiang_pro.custom.yaml @@ -2,7 +2,7 @@ patch: speller/algebra: __patch: #- 模糊音 # 这里启用后,本文件末尾可配置具体条目 - - wanxiang_algebra:/pro/自然码 # 可选输入方案名称:自然码, 自然龙, 小鹤双拼, 搜狗双拼, 微软双拼, 智能ABC, 紫光双拼, 国标双拼,龙三 + - wanxiang_algebra:/pro/自然码 # 可选输入方案名称:自然码, 自然龙, 小鹤双拼, 搜狗双拼, 微软双拼, 智能ABC, 紫光双拼, 国标双拼 - wanxiang_algebra:/pro/直接辅助 #辅助码升级为:直接辅助和间接辅助两种类型,都是句中任意,不同点在于直接辅助是nire=你 而间接则需要/引导 ni/re=你 ,在这个基础上直接辅助支持拼音后任意位置数字声调参与,间接辅助声调在/引导前参与 #- 自然码提权 #本文件末尾,有自然码和小鹤的可以用 ##########################以上格式受指令初始化控制,最好保持格式不变,如果发生变更请不要使用指令修改相关数据#####################################