跳到主内容
机场工具箱
报错解释 机场工具箱 编辑部

一个值换行了就报错?YAML 的续行要写成 > 或 |

校验器提示「一个键的内容换行了,但没有用正确的续行写法」,多半是长字符串被编辑器自动折行、或者从网页复制时带进了换行。本文说明 YAML 里值换行的三种合法写法,以及它们的区别与选择。

发布:2026 年 7 月 29 日 约 2 分钟读完
本文目录(7 节 · 约 2 分钟) +
  1. 01 报错长什么样
  2. 02 为什么会无意中换行
  3. 03 三种合法写法
  4. 04 在 Clash 配置里该用哪个
  5. 05 一个高频具体场景
  6. 06 怎么快速定位
  7. 07 相关

一句话结论:YAML 里一个值默认必须待在一行内。要跨行,得显式写成块状标量 key: |key: >,否则第二行会被当成新的一条语法来解析,于是报错。

报错长什么样

一个键的内容换行了,但没有用正确的续行写法

值如果要换行,要么写成 key: >key: | 的块状写法,要么保持在一行内。

为什么会无意中换行

编辑器自动折行看起来像换行,其实不是。 这种情况不会报错——软折行只是显示效果,文件里仍是一行。看到报错说明文件里真的有换行符。

从网页复制时带进了换行。 教程页面为了排版,会把长字符串(Reality 公钥、gRPC 的 serviceName、很长的路径)折成两行显示。复制的时候那个换行符会跟着进来。

手动排版时按了回车。 觉得一行太长不好看,就在中间敲了个回车——YAML 不接受这种。

三种合法写法

假设有一个很长的值:

保持在一行(最简单,推荐):

ws-opts:
  path: /a/very/long/path/that/looks/uncomfortable/but/is/fine

行长本身不是问题。YAML 没有行宽限制,客户端也不在乎。

折叠块 >:换行会被折叠成空格。

description: >
  这一行和
  下一行会被合并成一行,中间用空格连接。

结果是 这一行和 下一行会被合并成一行,中间用空格连接。

保留块 |:换行原样保留。

description: |
  第一行
  第二行

结果里真的有一个换行符。

在 Clash 配置里该用哪个

基本上哪个都不该用。 Clash 配置里的字段——路径、域名、UUID、公钥——都是不应该含空格或换行的单值。真正需要块状标量的场景在 Clash 配置里很少见。

所以遇到这条报错,正确动作通常不是「改成 | 写法」,而是把误入的换行删掉,让值回到一行

判断依据很简单:这个值本来就该是一个连续的字符串吗?路径、密钥、域名都是。那就删换行。

一个高频具体场景

Reality 的公钥很长,是最容易被折断的字段:

# 错的:从网页复制时断成了两行
reality-opts:
  public-key: 3Yx8kQvN2mPz
    LbR7wT5aHfCg

# 对的:接回一行
reality-opts:
  public-key: 3Yx8kQvN2mPzLbR7wT5aHfCg

断掉的公钥即便侥幸没报语法错误,握手也一定失败——它是逐字符校验的。把节点链接粘进节点链接解析器可以看到公钥的原始完整值,照着补回去比手工拼接可靠。

Reality 是什么,它和普通 TLS 差在哪

怎么快速定位

这类换行在编辑器里几乎看不出来,因为软折行和硬换行长得一样。把配置粘进配置校验器,它会标出出错的行号并跳过去——比肉眼扫快得多。

相关

照着做一遍,比再看十篇都有用

先挑好客户端,遇到连不上再回来排查。

相关文章

配置报错、链接看不懂?粘进来看一眼

不用注册、不用填订阅地址,把出问题的配置或看不懂的节点链接直接粘进对应工具,结果当场显示。全部计算在你的浏览器里完成,粘贴的内容不会上传到任何地方——页面加载完之后断网,工具照样能用。