必须安装 hashicorp 官方 terraform 插件(id:hashicorp.terraform),并重启 vscode;执行 terraform init 生成 .terraform/ 目录;在工作区打开全部相关文件,且确保 terraform cli 可访问,三者缺一不可。

必须装 HashiCorp 官方 Terraform 插件,不是“HCL”或第三方替代品
VSCode 默认不识别 .tf 文件,语法高亮和补全失效的首要原因是装错了插件。搜索“Terraform”时,只认准发布者是 HashiCorp 的那个——ID 是 hashicorp.terraform。其他如 HCL(作者 mattly)、Terraform Syntax Highlighting(mauve)等,只能做基础着色,不提供资源参数提示、var. 跳转、module source 悬停文档等核心能力。
安装后必须重启 VSCode:语言服务器(terraform-ls)只在重启后启动,否则右下角始终显示 Plain Text 或 HCL (unofficial),所有智能功能都不会加载。
验证是否生效:打开任意 .tf 文件,右下角应显示 HCL 文字 + Terraform 图标;输入 aws_instance. 应立刻弹出属性建议列表。
terraform init 没跑过,补全永远不工作
官方插件的补全、跳转、悬停文档等功能严重依赖本地 .terraform/ 目录里的 provider schema 和 module 结构。这些只有执行过 terraform init 才会生成。没运行过,插件就“看不见”你用的 aws 或 azurerm provider 有哪些资源、哪些参数。
- 项目根目录必须有
terraform { required_version = ">= 1.0" }块(哪怕只是占位),否则语言服务器直接拒绝加载 - 所有
.tf文件需在同一个 VSCode 工作区打开;子目录单独开窗口,跨文件补全会断连 - Windows 用户避开中文路径——
terraform-ls在含中文的路径下会崩溃,表现为补全卡死、悬停无响应
保存不自动格式化?两个开关都要开,且 CLI 必须可访问
terraform fmt 不是插件自带的功能,它调用的是你本地安装的 terraform CLI。如果 which terraform(macOS/Linux)或 where terraform(Windows)返回空,或者路径配错,保存时就完全没反应,缩进混乱、换行错位问题持续存在。
必须同时启用这两项设置(缺一不可):
-
editor.formatOnSave:VSCode 级别的通用开关 -
terraform.formatOnSave:插件自己的开关,仅此一项开启才真正触发terraform fmt
在工作区 .vscode/settings.json 中写入:
{
"editor.formatOnSave": true,
"terraform.formatOnSave": true,
"terraform.path": "terraform"
}
"terraform.path" 设为 "terraform" 即可,除非你把二进制放在非标准位置(如 /opt/terraform),才需要填绝对路径。
非标准文件名(如 .infra.tf)要手动关联语言模式
插件默认只处理 *.tf 和 *.tfvars。遇到 main.infra.tf、backend.azure.tf 这类命名,VSCode 当作纯文本,高亮、补全、校验全部失效。
操作很简单:
- 打开该文件 → 点击右下角语言标识(比如显示
Plain Text)→ 选 “Configure File Association for ‘*.infra.tf’…” - 输入
*.infra.tf,回车后从列表中选Terraform - 同理可加
*.tf.json、*.auto.tfvars等
这步做完,文件图标会变,右下角显示 HCL + Terraform 图标,补全立刻恢复。别指望插件自动猜——它不会。
最容易被忽略的是:补全和跳转不是“装完插件就通电”的功能,它卡在三个硬性条件上——官方插件已重启、terraform init 已执行、所有相关文件都在当前工作区。少一个,你就得手动查变量、翻文档、拼字符串。











