Sublime Text 默认不识别 .hcl 文件,需手动绑定扩展名到 HCL 或 Terraform 语法;装插件后点击右下角“Plain Text”→“Open all with current extension as…”选择对应项即可生效,无需重启。

Sublime Text 默认不识别 .hcl 文件,打开后就是 Plain Text —— 这不是插件没装,是语法映射根本没建,所有 Terraform、Vault、Consul 的配置文件都白瞎高亮。
为什么 .hcl 文件没语法高亮?
Sublime 只靠扩展名匹配语法,而官方 HCL 插件(如 HashiCorp 官方或社区版)通常只注册 .tf 和 .tfvars,不自动绑定 .hcl。即使你装了 HCL 或 Terraform 插件,.hcl 仍可能被当作文本处理。
- 右下角显示 “Plain Text” 就是铁证
- 不是 detect_syntax 设为 true 就能解决——它只对无后缀/首行有 shebang 的文件起一次作用
- 别去改
Packages/Theme - Default/下的配色方案,那是只读的,改了也不生效
手动绑定 .hcl 到 HCL 语法(最稳方法)
这是 95% 场景下唯一需要的操作,无需重启,立刻生效:
- 随便新建或打开一个
main.hcl文件 - 点击窗口右下角的 “Plain Text” → 选 “Open all with current extension as…”
- 在弹出菜单里搜索 “HCL” 或 “Terraform”,选中对应项(常见名称:Terraform、HCL、HashiCorp Config)
- 如果没看到选项,说明插件没装全:用
Ctrl+Shift+P→ “Install Package” → 装Terraform(作者: bschollnick)或HCL(作者: zchee)
完成后,所有 .hcl 文件都会自动高亮,且 scope 会变成类似 source.hcl 或 meta.block.resource.hcl —— 后者可用于后续配色定制。
给 resource 块单独上色(可选但实用)
如果你希望 resource、provider、module 这类关键字或整个代码块更醒目,得改配色方案,而不是语法定义:
- 先确认 scope:光标放在
resource上,按Ctrl+Shift+P→ “Developer: Show Scope Name”,看到类似meta.block.resource.hcl - 打开用户配色文件:
Packages/User/Monokai Custom.sublime-color-scheme(或你当前用的主题名 +Custom) - 在
"rules"数组里加一条:
{
"scope": "meta.block.resource.hcl",
"foreground": "hsla(210, 80%, 60%, 0.95)"
}注意:foreground 值必须是合法颜色字符串(#rrggbb、hsl()、hsla() 都行),写错会导致整条规则静默失效;改完保存,不用重启,但要重新打开文件才能看到效果。
容易被忽略的兼容性细节
有些 HCL 文件其实是混合体(比如含嵌套 JSON 或模板表达式),原生 HCL 语法包可能解析不全:
-
jsonencode(...)或templatefile(...)里的内容不会被着色——这是正常限制,不是 bug - 如果你用的是较老的
.tf插件,它可能把.hcl当作旧版 HCL1 解析,导致for表达式或动态块高亮异常 - 真正想支持完整 HCL2 语义(如
dynamic、for_each),建议用更新活跃的插件:优先选Terraform(bschollnick)而非过时的HCL包
scope 名称本身会随插件版本变化,比如新版本可能是 meta.block.resource.terraform.hcl,所以每次调色前务必用 Developer: Show Scope Name 实时确认,别凭记忆硬写。

















