默认yaml语法不检查缩进层级,因其仅识别冒号、短横线和基础缩进结构,不理解kubernetes等语义字段;缩进错一位即退为plain text,作用域丢失,需安装yaml for kubernetes插件、设为yaml (kubernetes)语法,并关闭detect_indentation、启用auto_indent和translate_tabs_to_spaces。

为什么默认 YAML 语法不检查缩进层级
Sublime 自带的 YAML 语法只做基础结构识别:认冒号、短横线、基础缩进层级,但完全不理解 spec、containers、env 这些 Kubernetes 或 Home Assistant 的语义字段。一旦缩进错一位(比如 ports: 下少空一格),整块内容直接退为 Plain Text——不是颜色变淡,是作用域彻底丢失,折叠失效、括号不匹配、关键字无着色。
右下角显示 “YAML” 并不等于生效;必须看到 YAML (Kubernetes) 或 YAML (Home Assistant) 才算加载对语法引擎。
必须装 YAML for Kubernetes 插件并重启
别用 Better YAML 或泛用 YAML 插件,它们不提供 Kubernetes 字段语义支持。唯一推荐的是 YAML for Kubernetes(作者 mattfoster):
- Ctrl+Shift+P →
Package Control: Install Package→ 输入YAML for Kubernetes - 安装后必须重启 Sublime Text(尤其 Windows 和旧版 macOS,不重启新语法文件不加载)
- 打开任意
.yaml文件 → 点右下角语言名 →Open all with current extension as…→ 选YAML (Kubernetes) - 验证:光标停在
spec:上,Ctrl+Shift+P →Developer: Show Scope Name,应返回source.kubernetes-yaml
缩进检查依赖三个配置同时开启
即使语法对了,按下回车也不自动缩进下一级?问题出在配置链断裂。自动缩进不是插件自带功能,而是 Sublime 内核行为,需三者共存:
-
"auto_indent": true(用户设置里必须显式开启) - 右下角语言必须是
YAML (Kubernetes),不是YAML或Plain Text -
"detect_indentation": false(关键!默认为true,会扫描前几行覆盖你的缩进偏好) - 推荐加:
"tab_size": 2(K8s 官方规范)、"translate_tabs_to_spaces": true(禁用 Tab,避免混用)
已有文件缩进混乱时怎么救
别直接 Ctrl+A + Reindent。混用 Tab 和空格、同级缩进量不一致(2 vs 4),会导致 yaml: line X: did not find expected key ——这不是格式问题,是解析器建栈失败。
先让隐藏字符显形:
- 用户设置加
"draw_white_space": "all":空格变·,Tab 变→ - 手动删掉开头几行的
→(尤其是→name:这类 Tab 开头行) - 确保前 10 行统一为 2 空格缩进后,再执行
View → Indentation → Convert Indentation to Spaces - 最后执行
View → Indentation → Reindent,或用YAML Tools的YAML: Format Document
最易被跳过的一环:格式化不能修复坏结构。如果 →name: 和 ··image: 共存,先统一缩进形式,再格式化。否则只是把错误排得更整齐。











