要使sublime text正确支持terraform,需三步:安装terraform by int128插件、手动将.tf等后缀绑定至terraform语法、配置lsp-terraform语言服务器并确保已执行terraform init。

Sublime Text 要让 .tf 文件真正“有颜色、能提示、不报错”,不是装个插件就完事——关键在三件事:装对插件、手动绑定后缀、配对语言服务器。跳过任意一步,resource 和 output 都是灰色,var.ami_id 不高亮,保存也不自动格式化。
怎么选对 Terraform 语法插件(不是所有叫 Terraform 的都行)
必须用 Terraform by int128(作者 int128),不是单字 “Terraform” 插件,也不是 HCL(mattly 维护)或 Terraform Tools。前者已弃用,后者只认 .hcl 后缀,对 .tf 文件基本无效。
- 安装路径:
Ctrl+Shift+P→Package Control: Install Package→ 搜Terraform→ 点Terraform by int128 - 验证是否装对:
Ctrl+Shift+P→Package Control: List Packages→ 确认列表里有Terraform by int128,没有Terraform Tools或孤立的Terraform - 兼容性:
Terraform by int128支持 Terraform 0.12+ 和 1.x,语法作用域(如meta.block.resource.hcl)完整,补全和折叠也更稳
为什么 .tf 文件打开还是 Plain Text?绑定语法这步不能跳
插件只提供解析能力,不自动接管文件后缀。不绑定,Sublime 就当它是纯文本——右下角显示 Plain Text 是正常现象,不是插件没装好。
- 操作顺序:打开一个
main.tf→ 点右下角Plain Text→ 选Terraform → Terraform→ 再点菜单View → Syntax → Open all with current extension as… → Terraform → Terraform - 同理处理变量文件:
.tfvars和.auto.tfvars默认不绑定,需单独打开一个dev.tfvars,重复上述两步 - 如果仍不生效:重启 Sublime;再不行,按
Ctrl+` 打开控制台,看是否有error loading syntax,说明插件加载失败
resource/output 块颜色太淡?不是插件问题,是主题缺 scope 规则
很多主流主题(如 Monokai、Adaptive)对 HCL 特有作用域支持不全。resource 看起来像普通标识符,不是 bug,是主题没定义 meta.block.resource.hcl 这类 scope。
- 确认 scope:光标放在
resource上 →Ctrl+Shift+P→Developer: Show Scope Name→ 看输出是否含meta.block.resource.hcl - 加颜色规则:打开用户主题文件(路径通常为
Packages/User/Monokai Custom.sublime-color-scheme),在rules数组里加一条:
{
"scope": "meta.block.resource.hcl",
"foreground": "hsla(200, 70%, 60%, 0.9)"
}
- 切记别改
Packages/Theme - Default/下的原版文件——它只读,改了也不生效;必须复制到Packages/User/并在用户设置中显式指定"color_scheme"
补全、悬停、格式化都不工作?HCL 插件 ≠ LSP 客户端
装了 Terraform by int128 只管高亮和基础折叠,不提供 terraform validate、参数提示、var. 跳转这些功能。要真·智能提示,得配 LSP。
- 先装
LSP插件,再装LSP-terraform(它会自动下载并管理terraform-ls) - 本地必须已安装
terraformCLI,且terraform -v能正常输出;项目根目录必须有terraform { required_version = "" }块,否则terraform-ls直接拒载 - 格式化要生效,得确保
editor.formatOnSave和lsp_format_on_save都开启(后者是 LSP 插件自己的开关) - Windows 用户注意:
terraform-ls在含空格或中文的路径下会崩溃,建议把项目放在C:\tf\这类干净路径
最常被忽略的是:LSP 启动依赖 .terraform/ 目录里的 provider schema,而这个目录只有执行过 terraform init 才会生成——没跑过 init,补全永远是空的。











