rime 是一个输入法引擎,weasel 是其在win10平台的实现。weasel 提供了各种配置选项,用户可以在用户目录下通过配置 yaml 文件来组装功能,从而配置出适合自己的 schema(以下称为 方案)。weasel 自带了多种方案,在用户目录的build
目录中。但是,如果想更改某种输入法方案,不能直接在其对应的*.schema.yaml
上面修改。因为每次手动 deploy(部署)之后build
目录下的这些文件会还原,就说帅不帅吧!解决这个问题,有两个办法:一是新建方案(需要熟悉了解方案配置,参考Rime 輸入方案設計書),二是用户配置覆盖原方案。
对于第二种方法,可在用户目录下创建Foo.custom.yaml
(Foo是一个比喻,其对应一个已经存在的方案),那么就能通过修改该文件的 patch(补丁)字段来覆盖build
目录下对应的Foo.schema.yaml
的方案配置(既名字相同,就能通过映射关系来进行覆盖)。你可以将Foo.schema.yaml
的所有配置原封不动地复制到Foo.custom.yaml
的 patch 字段下(要注意修改缩进,另外,yaml 格式文本的缩进是两个空格),然后再在上面修改,达到局部修改的效果。
追加个人根词库需要先在用户目录下新建root.dict.yaml
文件(名字可以不是 root,只是概念上像 root):
# *.dict.yaml 严格按照这个格式"---"开头,"..."结尾
---
name: your_name # 可用和文件名中root相异
version: "2024.08.11"
sort: by_weight
use_preset_vocabulary: true
import_tables:
# 这里再引入rime预配的词库
- luna_pinyin
# 以及自己自定义的词库
- _info # 个人信息(我的)
- _sogo # sogo账号导出的词库(我的)
- _demo # 自定义符号
...
然后自定义自己具体词库,我这里以_demo
词库为例,在用户目录下新建_demo.dict.yaml
如下:
---
name: symbol
version: "2024.08.11"
sort: by_weight # 对于候选词排序,by_weight指根据权重来,original指根据你提供的顺序来
use_preset_vocabulary: false # 开启预选,你还没完整打出对应的拼音,对应词汇也会跳出来候选
...
# 每一行对应一个三元组(候选词,拼音,权重),中间要用tab区分开
α alpha # 可不写权值
充分必要 c f b y 100 # 权值越大,候选的时候就排越前面(拼音内部是用空格分开的)
⇔ cfby 1 # "cfby",只会匹配候选 ⇔,像一个单词
⇔ c f b y 2 # "c f b y",像四个声母,既匹配 充分必要 又匹配 ⇔
注意,这里的文件命名的_demo.dict.yaml
必须和根目录root.dict.yaml
所引用的_demo
一样(词库引用是按照文件名来的,引用出只要写 _demo 无需写 .dict.yaml)。还有就是,三元组必须要 tab 分开(就算从这里复制粘贴也可能不是 tab,有些编辑器的 tab 对应的是多个空格,也不是 tab,比如默认的 vscode),拼音中间的多个单拼只能用空格分开。
最后,在Foo.custom.yaml
中找到 patch/translator(yaml 文本中 patch 下的 translator 字段),把它下面 dictionary 对应的值改为创建的根目录名root
(无需把 .dict.yaml 写上)即可(相当于把根词库挂载到 Foo 方案上)。重新部署小狼毫,仍然使用 Foo方案,就能使用新词库力。