批量改节点名称前,要保留的是原始 YAML 字符流,而不是加载后再导出的那一份。规范把处理分成表示、序列化、呈现。Dump 时处理器会自行引入节点样式、缩进、是否写出标签、指令集合,甚至可能添加注释;映射在表示里键无序,序列化时才强加顺序。加载时注释、键顺序、样式都不会进入构造。因此往返导出后的文本可以合法地与原文不同,不能当回退副本。
适用条件
适用于一次修改多个名称、替换可能波及引号或注释、需要失败时回到改前状态的场合。适用于含多份文档的流(用三条短横线分隔,用三个点结束文档而不开始新文档)。若只关心内存中已构造对象、不关心源文件注释,不必按呈现层备份,但也就无法恢复原注释。
保留与回退步骤
- 在任何替换之前,完整复制当前呈现流,作为唯一权威备份。备份必须包括文档前缀、指令、注释和空白,因为这些只存在于呈现层。
- 在副本上批量改名称,原件保持不动。会碰到井号或冒号加空格等指示符的名称应写成引号标量,避免改完后整份流无法解析。需要转义用双引号,不需要转义用单引号。
- 尝试加载修改后的流。解析失败属于格式不良,立即停止继续替换。判断依据:能组成表示图,并且目标名称出现在标量内容中而不是只出现在注释里,才算改名成功。
- 不要用加载成功再 dump 出来的结果覆盖备份。Dump 不保证键顺序、注释和标量样式复原;锚点呈现名称也可由处理器另选。覆盖后将失去回到原呈现的能力。
- 回退方法是用备份的字符流整体替换失败结果,而不是手工撤销若干行。多文档流要整段恢复,避免只恢复其中一个文档导致指令或别名错位。
失败时下一步
若备份已丢失,只能以当前能加载的表示为准,接受注释和顺序可能已经不同。若备份能加载而修改后不能,用备份覆盖并缩小替换范围,每次只改已用引号保护的名称。若加载成功但部分名称没改到,可能是名称写在注释里:注释不会进入表示,改注释不会改变构造结果,应改标量内容本身。确认稳定前不要删除备份流。