Clash 配置一般以 YAML 文本保存。YAML 1.2.2 把处理分成表示、序列化与呈现:注释、缩进、节点样式、映射键顺序属于呈现或序列化细节;从字符流构造原生数据时,应用程序不应依赖注释。要记录每次配置修改的日期和来源,先判定记录只给人打开文件核对,还是加载后仍要能读到。
适用条件与判断依据
适用:你能直接编辑该 YAML 文件或片段;文件符合 YAML 流结构(可用文档标记标明开始);记录要么写在井号注释里供人读,要么写成映射或序列中的标量,以便进入表示图。
判断依据:规范写明注释以井号开头;解析会丢弃呈现细节,构造不得引用注释、指令、键顺序、节点样式。若目标是审计文本本身,注释足够;若目标是程序读到何日、从何而来,必须使用键值,而不是只写在井号后面。
不适用:无法控制写出器是否保留注释的自动转储;把井号插进会破坏纯量或缩进的位置;把映射键的排列顺序当成修改时间线(映射键无序)。
用注释记录日期和来源
规范第 2 章示例在行尾或独立行使用注释。可在文档前或变更块上方写清日期与来源:
# 修改日期: 2001-12-15T02:59:43.1Z
# 来源说明: 规则合并,订阅参数 token=示例
---
hr: 65 # 行尾注释只供人读,不进入构造结果
步骤如下。第一,确认该行允许注释:独立行或行尾,且不破坏块缩进。第二,日期采用规范示例 2.22 一类可读时间,例如 2001-12-15T02:59:43.1Z、2001-12-14 21:59:43.10 -5 或仅日期 2002-12-14,避免“刚才”“最新”等无法排序的词。第三,来源写清是人工编辑、合并片段还是订阅参数;订阅只写 token=示例 这类片段,不编造完整网址。第四,保存后重新打开文本,注释仍在,说明当前文件尚未被丢弃呈现细节的转储覆盖。
多文档可用三条连字符分开。每次修改若另起一份文档,在每个文档标记前用注释标明该次日期与来源。三个点只表示文档结束且不开始新文档,不要把它当作版本号。锚点与别名用于重复节点,不能代替来源说明,注释也不会随别名传递。
用数据节点保存可被加载的记录
若记录必须进入表示图,应写成映射或序列。规范用冒号与空格标记键值。需要多次历史时,用序列保证顺序:
change_log:
- date: 2001-12-14
source: 初始文本
- date: 2001-12-15T02:59:43.1Z
source: token=示例
判断依据:这些节点有种类和内容,构造阶段可以基于表示信息读取。若希望看起来像日期的标量保持字符串,规范示例使用 !!str 2002-04-28。来源含特殊指示字符时,使用引号样式。YAML 不规定业务程序必须保留未知键;加载器按固定模式丢弃未识别键时,程序里可能看不到这些字段,文本里却还在。此时应保留一份未被业务写出器覆盖的副本。
失败时的下一步
打开失败:按规范检查良构流、缩进空格与注释,确认井号、文档标记、缩进没有切断块序列或块映射。注释保存后消失:符合转储后不保留呈现细节,改为映射字段,或停止用会重写文件的工具只改注释。程序读不到日期:确认记录不在注释里,确认键名是否被应用模式丢弃,不要用键顺序表达时间。导出后键顺序或样式变化:序列化会重排键并选择节点样式,历史必须写在标量内容里。无法判断加载器是否保留未知键:把日期与来源放在独立 YAML 文档中归档,不与会反复加载转储的业务配置混写。