减少 Clash 配置被误改缩进,关键是让编辑过程插入的空白符合 YAML 1.2.2 对缩进空格的定义。块状集合用缩进确定作用域;呈现阶段才会写入缩进量。行首空白若变成制表符,或同一层宽度忽大忽小,解析会得到另一棵树,输入也可能不成形。
适用条件
适用于以块状样式维护的配置文本。流式样式用显式指示符而非缩进表示范围,行首空白对流式片段影响较小,但同一文件中的块状部分仍受空白约束。规范把缩进空格、分隔空格、行前缀和空行分开定义:编辑时应保证“表达层级的行首字符”始终是空格,且同一文件内相对宽度稳定。构造原生数据不会把缩进层数当字段读取,因此调整编辑行为的目标是避免呈现被改写,而不是改变表示图里的业务内容。
与规范对应的判断,而不是具体菜单名
第一,让制表键插入空格。规范写明:为保持可移植,缩进不得包含制表符,因为不同系统对制表符处理不同;并指出多数现代编辑器可配置为按下制表键时插入适当数量的空格。保存时也不要把行首空格替换成制表符。缩进被定义为换行之后的空格字符。
第二,在一份文件里固定一种缩进宽度。规范不规定必须是某几个空格,但块状作用域完全靠相对列位置。自动缩进若有时两个空格、有时四个,兄弟条目就会对不齐。第三,让空白在编辑时可见,以便区分行首缩进空格、行内分隔空格以及误入的制表符。注释以 # 开始,其前方空白不是集合结构,可见空白可避免把注释对齐当成节点对齐。
第四,不要让自动重排擅自改写呈现。呈现还包括节点样式(块状或流式)、标量格式以及是否写出标签。一次重排若把块状改成花括号,或改写 |、> 的块缩进指示,字符流即已变化;折叠样式里更缩进的行还会决定是否保留换行。第五,保持换行可预期,因为缩进计算建立在换行之后。第六,短横线或冒号之后应是分隔空格,不要在指示符位置插入制表符,以免两类空白被混成一层。
仍出现误改时的下一步
保存后解析失败时,在空白可见的前提下查看失败行附近是否出现制表符或兄弟错列,将行首制表符转为空格后再解析。若失败紧跟某次自动重排,对照是否改变了节点样式或块标量缩进指示。需要暂时降低对缩进的敏感时,把局部改成流式集合,用括号固定范围。确认流 well-formed 之后,再处理标签与别名等后续加载失败点。不要把“构造忽略缩进层数”理解成可以随意改行首空白。