sublime默认yaml语法不报缩进错误,因其仅做基础结构识别,不校验一致性;需sublimelinter、yamllint适配器及cli工具联动,并禁用detect_indentation才能实现严格检查。

为什么默认 YAML 语法不报缩进错误
Sublime 默认的 YAML 语法只做基础结构识别(冒号、短横线、缩进层级),不校验缩进一致性,也不触发任何错误提示。它不会告诉你 ports: 下少空两格、env: 和 volumeMounts: 缩进量不一致——整段直接降级为 text.plain,高亮消失、折叠失效、括号不匹配,但编辑器不报错、不标红、不弹警告。
必须装三样东西才能真检查缩进
光靠语法高亮或格式化插件,无法实现严格缩进检查。真正起作用的是以下三者联动:
-
SublimeLinter(主框架) -
SublimeLinter-contrib-yamllint(YAML 专用适配器) - 系统级
yamllintCLI 工具(实际执行校验)
缺任一环,保存时都只会显示 “0 errors, 0 warnings”。验证是否生效:打开一个明显缩进错位的文件(比如 spec: 下 containers: 少缩进 2 空格),保存后看右下角是否出现黄色警告图标和具体行号提示。
关键配置项必须手动关掉 detect_indentation
detect_indentation 是缩进检查的最大干扰源。它默认开启,一打开文件就扫描前几行,自动覆盖你设的 tab_size 和 translate_tabs_to_spaces,导致 yamllint 校验时看到的缩进和你编辑时看到的不一致。
在 Preferences → Settings – User 中必须加这两行:
{"detect_indentation": false,"translate_tabs_to_spaces": true}
同时建议加上:
-
"tab_size": 2(Kubernetes 官方推荐) -
"draw_white_space": "all"(让空格显示为 ·、Tab 显示为 →,一眼识别混用)
缩进错误救不回来?先显形再清理
已有文件缩进混乱(比如部分用 Tab、部分用 2 空格、部分用 4),直接 Reindent 或 Convert Indentation to Spaces 很可能失败(菜单灰掉)或误伤字符串里的制表符。
正确顺序是:
- 打开
"draw_white_space": "all",看清哪些行开头是→(Tab)、哪些是··(2 空格)、哪些是····(4 空格) - 手动删掉前 5–10 行开头的
→,确保顶层字段(apiVersion:、kind:、metadata:)全部对齐且只含空格 - 再执行
View → Indentation → Convert Indentation to Spaces - 最后执行
View → Indentation → Reindent Lines
最易忽略的一点:yamllint 只能告诉你“缩进错了”,但不会指出哪一行该缩进多少——它依赖你已统一好空格风格;否则报错位置会偏移,甚至漏报。











