Sublime如何配置SaltStack SLS文件语法高亮?(配置管理)

1次阅读

应安装bbkane维护的saltstack插件,它支持.sls文件的yaml结构、jinja2模板及salt模块高亮;缩进错误、大小写扩展名、windows反斜杠转义等问题会导致高亮失效,需规范格式并可自定义扩展语法。

Sublime如何配置SaltStack SLS文件语法高亮?(配置管理)

找不到 SaltStack SLS 语法高亮包

sublime Text 默认不带 saltstack.sls 文件支持,打开后就是纯文本,YAML 关键字、Jinja2 模板、Salt state 函数全无颜色区分。这不是你配置错了,是压根没装对的插件。

正确做法是安装社区维护的 SaltStack 插件(作者:bbkane),它专为 .sls 文件设计,能同时识别 YAML 结构、{% %}{{ }} Jinja2 块、以及常见 Salt 模块如 file.managedpkg.installed 等。

  • Package Control: Install Package 命令,搜 SaltStack(注意不是 SaltSalt States
  • 安装后重启 Sublime,或手动执行 View → Syntax → Open all with current extension as… → SaltStack
  • 如果仍不生效,检查文件扩展名是否为小写 .sls —— 大写的 .SLS 不会被自动关联

YAML 缩进错位导致高亮全崩

.sls 是 YAML 格式,但 Salt 对缩进比标准 YAML 更敏感。哪怕只多一个空格,Sublime 的 SaltStack 语法解析器就会放弃高亮,退回到纯白文本状态,看起来像“插件失效”了。

这不是插件 bug,是它主动放弃解析失败内容。常见诱因:

  • state_id: 后面漏了换行或缩进,直接跟 file.managed:
  • Jinja2 块里混用了 tab 和空格(SaltStack 插件默认只认空格缩进)
  • context:defaults: 下的嵌套层级不对齐,尤其在多层 for 循环模板中

快速验证:把文件另存为 test.yaml,用 Sublime 自带 YAML 语法打开——如果它也乱,说明是缩进问题,不是插件问题。

自定义高亮让 pillar.getgrains.filter_by 显色

原生 SaltStack 插件只高亮基础模块(filepkgservice),但 pillar.getgrains.filter_bysalt['cmd.run']() 这类常用函数默认是白色,容易看漏。

可以手动补丁语法定义,不用改插件源码:

  • 菜单栏 Preferences → Browse Packages…,进入 SaltStack 文件夹
  • 复制 SaltStack.sublime-syntaxUser/ 目录下重命名为 SaltStack-Extended.sublime-syntax
  • contexts 区域追加类似规则:
    - match: (pillar.get|grains.filter_by|salt['[^']+?']())     scope: support.function.salt
  • 重启 Sublime,再执行 View → Syntax → SaltStack Extended

注意:每次插件升级会覆盖原文件,所以务必放 User/ 目录下,且文件名不能和原插件冲突。

Windows 上路径分隔符引发 Jinja2 高亮中断

在 Windows 写 file.managed 时用 source: salt://path o ile(反斜杠),SaltStack 插件会把 当作制表符转义、 当作换页符,导致后续 Jinja2 块无法识别,整段变白。

这不是 Windows 特有问题,是 YAML 解析器对反斜杠的通用处理。解决方式很直接:

  • 全部改用正斜杠:source: salt://path/to/file(Salt 本身完全支持)
  • 或用单引号包裹路径:source: 'salt://path o ile',避免转义
  • 双引号也行,但得转义:source: "salt://pathtofile"

顺带一提:Sublime 的 SaltStack 插件至今没适配 Windows 路径自动转换,别指望它帮你修。

最麻烦的其实是混合了多层 Jinja2 循环 + YAML 锚点 + Salt 动态函数调用的文件——这时候高亮只是辅助,真正靠得住的还是 salt-ssh --state-verbose 实时验证。语法着色再准,也救不了逻辑错误。

text=ZqhQzanResources