1772702706

This commit is contained in:
Docker7530
2026-03-05 17:25:08 +08:00
parent 7d7193bb5d
commit 1a3976708a
67 changed files with 342 additions and 334 deletions
@@ -0,0 +1,65 @@
# 📔 Rime YAML Custom Patch 语法笔记
## 一、 核心规则与权重
1. **权重排序**`custom.yaml` > `schema.yaml` > `default.yaml`
2. **对应关系**:修改 `xxx.schema.yaml` 需创建 `xxx.custom.yaml`。**注意:** `.dict.yaml` 无法被 patch。
3. **最终形态原则**:Patch 作用于编译后的“最终形态”(见 `build/` 文件夹)。若原方案包含 `__include`,需 patch 其引入后的结果,而非 patch `__include` 命令本身。
4. **结构限制**:一个 `custom` 文件顶层**只能有一个** `patch:` 入口。
## 二、 常用引用命令
- `__include: [路径]`:将指定段落内容引入当前位置。
- `__patch: [路径]`:功能类似 include,但可叠加使用(多个 `__include` 只有最后一个生效)。
- `__append: [列表]`:配合 patch 使用,将新列表内容追加到原列表后方实现拼接。
## 三、 语法操作符速查
| 操作类型 | 语法示例 | 说明 |
| :--- | :--- | :--- |
| **全局替换** | `key: new_value` | **慎用!** 会清空该键下的所有原有子项 |
| **局部替换** | `key/subkey: value` | 仅修改特定项,不影响同级其他项 |
| **末尾追加** | `key/+: [list]` | 在列表末尾添加新元素 |
| **特定行替换** | `key/@n: value` | 替换第 $n+1$ 行(索引从 0 开始) |
| **特定行插入** | `key/@before n: value` | 在第 $n+1$ 行前插入,原内容后移 |
| **末尾行替换** | `key/@last: value` | 直接定位并替换最后一行 |
| **删除/失效** | `key/subkey: ` | **不支持 `/-`**。通过将值设为空来使其失效 |
## 四、 关键行为解析
### 1. 局部修改 vs. 覆盖重写
- **推荐(局部)**`menu/page_size: 10` —— 只改数字,保留 `menu` 下的其他设置(如字体、颜色)。
- **危险(全局)**`menu: { page_size: 10 }` —— 会导致 `menu` 下除 `page_size` 外的所有配置被**删除**。
### 2. 列表(List)的操作细节
对于 `engine/filters` 等有严格顺序要求的模块:
- **不能直接用 `/+`**:因为 `/+` 默认加在末尾。如果某个引导器(Translator)必须排在前面,加在末尾会导致功能失效。
- **精准定位**
```yaml
patch:
engine/translators/@before 0: table_translator@custom_phrase # 插入到首行
engine/filters/@5: lua_filter@new_filter # 替换第6行
```
*注:`@` 语法后直接跟值,不需要加 `-` 横线。*
### 3. 如何“删除”配置
由于 Rime Patch 不支持 `/-` 语法,删除某行有两种方式:
1. **重写整个段落**:在 `patch` 中重新列出需要的行,剔除不需要的行(最彻底)。
2. **置空法**`key/subkey: `。虽然键还在,但值为空,通常能停止该功能。
## 五、 缩进与格式
- YAML 严格遵守 **2 空格缩进**。
- 不要在 `patch:` 段落中间插入顶层节点,否则会截断 Patch。
- 外部预设(如模糊音)建议放在文件末尾,通过 `__include` 引入到 `patch` 内部。
---
**💡 提示**:调试 Patch 时,若结果不符合预期,请第一时间检查 `build/` 文件夹下的产物,那是 Rime 真正读取的配置。
+52
View File
@@ -0,0 +1,52 @@
配置:
```
custom.yaml > schema.yaml > default.yaml
引用__include:
补丁__patch:
跟随__append:
不能patch一个__include段落
一个custom文件顶层必须只有一个patch:
```
```
1. 方案文件七大模块
阅读:wanxiang.schema.yaml:1-100
schema: # 方案元信息
switches: # 开关配置
engine: # 输入引擎(核心)
processors: # 处理器链
segmentors: # 分段器
translators: # 翻译器
filters: # 过滤器
speller: # 拼写设定
translator: # 翻译器设定
punctuator: # 标点设定
key_binder: # 按键绑定
recognizer: # 识别器
engine:
processors: # 1. 最先接收按键
- ascii_composer # 处理中英切换
- recognizer # 识别特殊模式(如反查)
- speller # 拼写处理
segmentors: # 2. 分段标记
- abc_segmentor # 标记普通文字段落为 'abc' tag
- affix_segmentor@wanxiang_reverse # 标记反查为特定 tag
translators: # 3. 翻译候选
- script_translator # 主翻译器
- table_translator@custom_phrase # 自定义短语
filters: # 4. 过滤排序
- uniquifier # 去重
```
+54
View File
@@ -0,0 +1,54 @@
快捷键(含场景与功能)
| 场景 | 按键 | 功能 | 来源 |
| ---------- | ----------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------ |
| 任意 | `Control+grave` | 打开方案选单 | `default.yaml` |
| 任意 | `Shift+space` | 切换到下一个方案 | `wanxiang.schema.yaml`, `wanxiang_english.schema.yaml` |
| 任意 | `Caps_Lock` | 清空未上屏内容并切换中英(按 ascii_composer 规则) | `default.yaml` |
| 任意 | `Shift_L` / `Shift_R` | 上屏编码并切换中英(按 ascii_composer 规则) | `default.yaml` |
| 任意 | `Control+Shift+3` / `Control+Shift+#` | 切换中英标点 | `wanxiang.schema.yaml` |
| 任意 | `Control+Shift+4` / `Control+Shift+$` | 切换简繁(s2t) | `wanxiang.schema.yaml` |
| 组合中 | `Alt+Left` / `Alt+Right` | 移动到上/下一音节(通过 Shift+Left/Right | `wanxiang.schema.yaml` |
| 组合中 | `Control+w` | 删除一个词(Control+BackSpace | `wanxiang.schema.yaml` |
| 候选存在 | `Control+e` | 切换中英翻译模式(chinese_english | `wanxiang.schema.yaml` |
| 候选存在 | `Control+a` | 切换辅助码显示(tone_hint | `wanxiang.schema.yaml` |
| 候选存在 | `Control+s` | 切换输入码音调显示(tone_display | `wanxiang.schema.yaml` |
| 候选存在 | `Control+t` | 切换 super_tips | `wanxiang.schema.yaml` |
| 候选存在 / 组合中 | `Control+g` | 切换字符集过滤(charset_filter | `wanxiang.schema.yaml` |
| 候选存在 / 组合中 | `Tab` | 跳到下一音节(Control+Right | `wanxiang.schema.yaml` |
| 组合中 | `Control+Tab` | 按序补码上屏(发送序列 `{Home}{Shift+Right}{1}{Shift+Right}` | `wanxiang.schema.yaml` |
| 候选存在 | `-` / `=` | 翻页(上一页/下一页) | `wanxiang.schema.yaml` |
| 组合中 | `Control+k` | 切换选项 `xxxxx`(配置里未定义,可能无效) | `default.yaml` |
| 组合中 | 小键盘 `0-9`/`.`/`+`/`-`/`*`/`/`/`Enter` | 映射为主键盘对应字符 | `default.yaml` |
| 排序模式 | `Control+j` / `Control+k` / `Control+l` / `Control+p` | 候选手动排序:上移/下移/重置/置顶 | `wanxiang.schema.yaml` |
编辑键(输入法编辑状态)
| 场景 | 按键 | 功能 | 来源 |
|---|---|---|---|
| 候选存在 | `Space` | 上屏当前候选 | `wanxiang.schema.yaml` |
| 组合中 | `Return` | 上屏原始输入 | `wanxiang.schema.yaml` |
| 组合中 | `Control+Return` | 上屏变换后的输入 | `wanxiang.schema.yaml` |
| 组合中 | `Control+Shift+Return` | 上屏注释(comment | `wanxiang.schema.yaml` |
| 组合中 | `BackSpace` | 撤销上次输入 | `wanxiang.schema.yaml` |
| 组合中 | `Delete` | 删除后一个字符 | `wanxiang.schema.yaml` |
| 组合中 | `Control+BackSpace` | 删除一个音节 | `wanxiang.schema.yaml` |
| 候选存在 | `Control+Delete` | 删除或降权候选 | `wanxiang.schema.yaml` |
| 任意 | `Escape` | 取消输入 | `wanxiang.schema.yaml` |
特殊引导键/前缀
| 场景 | 按键/前缀 | 功能 | 来源 |
|---|---|---|---|
| 输入引导 | `/``o` | 触发 shijian.lua(日期/时间/节气等) | `wanxiang.schema.yaml` |
| 输入引导 | `U` + 十六进制 | Unicode 码点输出 | `wanxiang.schema.yaml` |
| 输入引导 | `R` + 数字 | 数字金额大写 | `wanxiang.schema.yaml` |
| 输入引导 | `V` + 表达式 | 计算器功能 | `wanxiang.schema.yaml` |
| 输入引导 | `/` + 代码 | 符号/表情/特殊字符表(如 `/fh``/bq` 等) | `wanxiang_symbols.yaml` |
| 输入行为 | `/` 单独作为输入 | 斜杠被占用为引导键,配置里用双击 `/` 方式输入本身 | `wanxiang.schema.yaml` |
| 候选存在 | `[` / `]` | 以词定字:取首字/末字 | `wanxiang.schema.yaml` |
| 候选存在 | `,` | super_tips 上屏按键 | `wanxiang.schema.yaml` |
![](../../../attachment/images-uuid/1b6c8b1c84064481ac7c72347ba8e259.png)
![](../../../attachment/images-uuid/b8817fb44bcf4c4c938e9492dc554bcd.png)