sublime text 需装 sublimelinter + yamllint 插件实现 yaml 语法校验,再配 lsp-yaml + yaml-language-server 实现 schema 语义校验,二者缺一不可。

YAML 文件保存时自动校验语法
sublime text 本身不带 YAML 语法校验,得靠插件在保存时调用 yamllint 或 yaml-language-server。最稳的路径是装 SublimeLinter + SublimeLinter-contrib-yamllint,前提是系统已装好 yamllint(Python 工具)。
常见错误现象:SublimeLinter 显示 “No linters found for this view”,其实是没装对子插件,或 yamllint 不在 $PATH 里。
- 先用
pip install yamllint装命令行工具(推荐用系统 Python,别用 pyenv 或 conda 的默认环境,容易找不到) - 通过 Package Control 安装
SublimeLinter和SublimeLinter-contrib-yamllint(注意名字带-contrib-,漏掉就无效) - 重启 Sublime 后,打开一个
.yml文件,按Ctrl+Shift+P输入SublimeLinter: Toggle Linter,确认yamllint是启用状态 - 如果仍不触发,打开
Preferences → Package Settings → SublimeLinter → Settings,检查linters下是否有yamllint条目,且disable为false
YAML Schema 校验(比如 kubernetes、ansible 文件)
纯语法检查只能抓缩进、冒号、空格,但字段名错、值类型错(比如该写 true 写成 "true")、必填字段缺失——这些得靠 json Schema 配合语言服务器。
使用场景:编辑 deployment.yaml 时提示 spec.template.spec.containers[0].image is required 这类语义级报错。
- 必须装
LanguageClient-neovim类插件?不,Sublime 有更轻量的方案:sublimeserver+yaml-language-server - 用
npm install -g yaml-language-server安装服务端(确保node在$PATH) - 再装插件
LSP和LSP-yaml(不是LSP-YAML,大小写敏感) - 关键一步:在
LSP-yaml的 settings 里配schemas,例如给*k8s*.yaml绑定https://raw.githubusercontent.com/instrumenta/kubernetes-json-schema/master/v1.28.0-standalone-strict/all.json - 注意:URL 必须可直连,公司内网可能需下载到本地,用
file:///path/to/schema.json格式
为什么改了配置还不生效?几个硬核排查点
不是插件没装,而是 Sublime 没把文件识别为 YAML,或者 linting 被静默禁用了。
- 右下角看当前 syntax 是否为
YAML(不是YAML (JSON)或Plain text),手动选View → Syntax → YAML - 检查文件后缀是否被映射:打开
Preferences → Settings – Syntax Specific,确认里面有"syntax": "Packages/YAML/YAML.sublime-syntax" -
SublimeLinter默认只在保存时运行,想实时校验要加"lint_mode": "background"到全局设置,但会轻微拖慢大文件响应 - 如果用的是 WSL 或远程开发,
yamllint路径得指向 windows 下的 Python(如C:Python39Scriptsyamllint.exe),不能写 linux 路径
替代方案:不用插件,用命令行快速验证
当插件反复失效、又急着提交 YAML 时,终端一行命令比调插件更快更确定。
-
yamllint ./*.yml批量扫当前目录所有 YAML -
yamllint --strict --no-warnings config.yaml开严格模式,禁用警告(只报 Error) - 想验证是否能被 Python 正确加载(绕过 schema,只测解析):
python -c "import yaml; print(yaml.safe_load(open('config.yaml')))" - 注意:某些 YAML 特性(如自定义 tag、锚点跨文件)
yamllint不检查,但 Pythonsafe_load会直接抛yaml.constructor.ConstructorError
Schema 校验和语法校验是两层事,很多人只配了前者,结果缩进错误还报不出来;也有人只依赖 yamllint,却不知道它压根不查字段合法性。这两层得各自配牢,缺一不可。