66 lines
3.1 KiB
Markdown
66 lines
3.1 KiB
Markdown
# 📔 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 真正读取的配置。
|