sublime text 中 .hcl 文件显示“plain text”是因为插件未将.hcl扩展名绑定到hcl/terraform语法;需手动右下角选择“open all with current extension as…”,选terraform或hcl语法,绑定后立即高亮生效。

Sublime Text 打开 .hcl 文件显示 “Plain Text”,不是插件没装,是语法根本没绑定——装完插件后必须手动把扩展名映射到 HCL 或 Terraform 语法,否则高亮永远不会出现。
为什么 .hcl 文件始终是 Plain Text?
Sublime 只靠文件扩展名匹配语法定义,不看内容。官方或主流 HCL 插件(如 Terraform by int128、HCL by zchee)默认只注册 .tf 和 .tfvars,几乎从不自动处理 .hcl。即使你已安装插件,只要没走绑定流程,Sublime 就永远把它当纯文本。
- 右下角显示 “Plain Text” 是唯一可靠判断依据,不是配色问题,也不是主题不支持
-
detect_syntax: true对.hcl无效:它只对无后缀或带 shebang 的文件起一次作用 - 别去改
Packages/Theme - Default/下的配色文件——那是只读的,改了也不生效
怎么让所有 .hcl 文件立刻高亮?
这是最稳、最快、95% 场景下唯一需要的操作,无需重启,改完即生效:
- 打开任意一个
main.hcl(哪怕空文件也行) - 点击窗口右下角的 “Plain Text” → 选 “Open all with current extension as…”
- 在弹出菜单中搜索 “HCL” 或 “Terraform”,选
Terraform(推荐)或HCL(如存在) - 如果菜单里没选项,说明插件未装全:按
Ctrl+Shift+P→ 输入Package Control: Install Package→ 装Terraform(作者 int128)或HCL(作者 zchee)
完成后,所有已打开和新打开的 .hcl 文件都会立刻高亮,且光标放在 resource 上按 Ctrl+Shift+P → “Developer: Show Scope Name”,能看到类似 meta.block.resource.hcl 的 scope —— 这是后续定制颜色的前提。
如何给 resource、provider 块单独上色?
基础高亮只是让关键字变色,但整块结构(比如整个 resource "aws_s3_bucket" "logs" { ... })默认仍是普通背景。要突出区块语义,得改配色方案,不是改语法定义:
- 先确认 scope:光标放
resource上,用 “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()),写错(比如用rgb()或拼错字段)会导致整条规则静默失效 - 保存后,需重新打开文件才能看到效果(不是重启 Sublime)
.tfvars 和 .auto.tfvars 也要单独绑定
别以为绑了 .hcl 就一劳永逸——.tfvars 和 .auto.tfvars 同样不会被自动识别,哪怕你装的是同一个插件。它们各自独立,必须分别绑定:
- 打开一个
terraform.tfvars→ 点右下角 “Plain Text” → “Open all with current extension as…” → 选Terraform - 同理处理
.auto.tfvars:新建一个空文件,绑定一次即可 - 如果你用
Preferences → Settings – Syntax Specific手动编辑,记得"extensions"数组里明确列出所有后缀:["tf", "tfvars", "auto.tfvars", "hcl"] - 路径大小写敏感,
packages写成Packages都会失败;sublime-syntax路径错误也不会报错,只会静默降级为 Plain Text
真正容易被忽略的,是 scope 的层级性和绑定的粒度——meta.block.resource.hcl 和 source.hcl 效果完全不同,而每个扩展名都得单独点一次绑定,没有“批量通配”机制。











