配置文件 YAML 语法错误
Clash 配置文件报 YAML 语法错误,多半是缩进用了 Tab、冒号后少了空格、用了中文标点或引号不成对。附 mihomo 的报错原文,可以用配置检查器找到出错的行。
适用:Clash Verge RevFlClashClash PartyClash Meta for AndroidClashX MetaClash Mimihomo
你看到的现象
导入或保存配置时报错,日志里有以 yaml: line 数字: 开头的信息。下面是用 mihomo v1.19.33 实测得到的几种报错,以及对应的写法错误:
| 报错 | 常见原因 |
|---|---|
found character that cannot start any token |
缩进用了 Tab |
mapping values are not allowed in this context |
冒号后面少了空格,或者某一行缩进多了 |
could not find expected ':' |
用了中文全角冒号”:” |
did not find expected key、did not find expected '-' indicator |
列表的 - 后面少了空格,或者缩进里混了全角空格 |
found unexpected end of stream |
引号没有成对 |
行号只是线索:报错里的行号是解析器发现问题的位置,真正写错的地方可能在它的前一行或前几行。例如实测中第 1 行 mixed-port:7890 少了空格,报错写的是 line 2。
最省事的办法是把配置粘贴到 配置文件检查器,它在浏览器本地运行,会标出出错的行。配置里有节点密码,不要贴到网上。
可能的原因和解决办法
缩进用了 Tab
怎么判断:报错是 found character that cannot start any token。mihomo 官方文档写明:YAML 用缩进表示层级,缩进不允许用 Tab,只能用空格。
怎么解决:把这一行开头的 Tab 换成空格。编辑器里打开“显示空白字符”更容易看出来;同一层级的内容左边要对齐,空格数量本身不重要。
冒号后面少了空格
怎么判断:写成了 mixed-port:7890。官方文档要求键值对写成 key: value,冒号后面要加一个空格。
怎么解决:改成 mixed-port: 7890。
用了中文标点或全角空格
怎么判断:用中文输入法写配置时,容易打出全角冒号”:“、全角空格。它们看起来和半角的很像。
怎么解决:切换到英文输入法,重新输入这一行的冒号、空格和逗号。
引号没有成对
怎么判断:报错是 found unexpected end of stream,行号往往在文件后面。往前找,看哪一行的引号只有一个,例如 password: "abc。
怎么解决:补上另一半引号。
列表的 - 后面少了空格
怎么判断:写成了 -name: 节点。列表的每一项要以 - 开头(减号加一个空格)。
怎么解决:改成 - name: 节点,并让同一个列表里的各项左边对齐。
常见问题
值里带 # 号会出问题吗?
按官方文档,# 在行首或前面有空格时才算注释开头。例如 password: abc #123 里,#123 会被当成注释丢掉。值里需要空格加 # 时,用引号把整个值括起来。
语法没问题了,又报别的错?
YAML 语法对了以后,内核还会检查内容,例如代理组引用的名字对不对,见 代理组引用了不存在的节点;旧写法的警告见 升级 mihomo 后提示字段已废弃。直接运行 mihomo 的,可以用 mihomo -t -f 配置文件路径 只检查配置不启动,结果会显示 test is successful 或 test failed。
还是没解决?
把客户端名称、版本和完整的报错信息发给我们(不要包含订阅链接),我们会补充到这一页。提交反馈