给他人核对 Clash 配置结构时,应交出一份仍符合 YAML 1.2.2 的最小字符流:能看出映射、序列与标量如何嵌套,但不包含可当作凭据使用的标量文字。YAML 是完整的数据序列化语言,转储会把原生结构写成 Unicode 文本;最小片段只保留正在验证的那一部分节点,并在写出前替换敏感内容。
适用条件
适用于说明层级、复现语法或核对块状作用域的场合。三种原语已足够:映射、序列、标量。不要为“看起来完整”而附带未讨论的子树。注释以 # 开头,构造阶段会丢弃,但字符仍留在流里,因此不能把口令、令牌写进注释。锚点与别名让同一节点多次出现,也不要把敏感节点先锚定再引用。多文档流可在同一文件放多份内容;最小片段通常只保留一个文档,并用 --- 标明开始,以免其他文档中的标量被一并送出。
制作步骤与是否“最小且无凭据”的判断
从原文只剪与问题相关的节点。块集合靠缩进确定作用域,剪裁后必须保持相对缩进,否则片段自身不成形。把所有可能构成凭据的标量改成无意义的普通字符串;若需防止被解析成整数、布尔或时间戳,使用引号样式——双引号提供转义,单引号在不需要转义时可用。规范示例即把看起来像数字的内容写成引号字符串以保持为字符串。
不要附带 !!binary 一类显式标签及其正文,也不要放入应用本地标签下的大段字面块,除非正在验证标签语法且正文同样是占位。块序列用短横线加空格,块映射用冒号加空格。若缩进容易干扰阅读,局部改用流式序列或流式映射,用括号表达范围,减少对缩进的依赖,同时仍使用占位标量。可用注释标明“下列值为占位”,但判断是否不含凭据时,必须扫描全部普通标量、| 与 > 块标量、注释以及锚点目标。呈现细节(缩进、样式、注释)虽不进入构造结果,却仍在要发送的字符流中,不能靠“构造会忽略”来隐藏信息。
最小的标准是:再删除任何一处占位标量或一层嵌套,要么无法说明当前语法问题,要么流不再 well-formed。还能再删,就还不够小。
失败时的下一步
对方无法解析时,先检查剪裁后缩进是否仍表达原作用域,必要时补上文档起始标记,去掉残留的文档结束标记。解析成功但仍可能含凭据时,按标量、块标量、注释、锚点目标再扫一遍,把剩余真实值改为带引号的占位字符串。结构仍不清楚时,把块状局部改成流式集合以确认范围,并继续删除未参与问题的键。标签无法解析、别名未标识等后续加载失败点,应在去掉敏感标量之后再处理,避免为调试标签而贴出真实内容。