应安装 HashiCorp 官方 Terraform 插件,确认发布者为 HashiCorp,重启 VSCode 并配置正确 terraform CLI 路径,开启 editor.formatOnSave 和 terraform.formatOnSave,手动关联非标准 .tf 文件后缀。
官方
插件是唯一推荐的起点,其他 HCL 或 Terraform 插件大概率会冲突、失效或不支持 HCL2 语义校验。
确认安装的是 HashiCorp 官方 Terraform 插件
VSCode 扩展市场里搜 “Terraform”,结果中必须认准发布者是
(不是
、
或任何带 “unofficial” 字样的)。这个插件同时提供 HCL 语法高亮、资源类型补全、
和
文档内联提示,以及基础 LSP 支持。
安装后必须重启 VSCode——插件依赖的语言服务器(LSP)只在重启后初始化,否则右下角语言模式始终显示
打开任意
文件,右下角应显示
+ Terraform 图标;若显示
或
,说明插件未生效或被覆盖
不要同时启用
(mattly)、
(mauve)等第三方插件,它们会抢占 LSP 端口,导致跳转失败、诊断丢失
手动指定
CLI 路径避免格式化/校验失败
插件本身不带
二进制,所有格式化、变量解析、模块跳转都依赖本地 CLI。如果
返回空或路径错误,你会看到“command not found”、“No module found”或保存后无反应。
终端运行
确认已安装 v1.0+;若未安装,从
官网下载
解压后加入
VSCode 设置中搜索
,填入绝对路径(如
或
)
该路径必须指向可执行文件本身,不能是目录;Windows 用户注意反斜杠要写成正斜杠或双反斜杠
和
必须同时开启
仅开
不起作用——Terraform 插件有自己的开关逻辑。关掉任一选项,
就不会在保存时触发,缩进错乱、属性换行混乱等问题会持续存在。
VSCode 1.118
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
下载
设置中搜索
→ 勾选
再搜索
→ 设为
还需确保
是
,否则 VSCode 可能调用其他格式化器(比如 Prettier)导致报错
验证方式:改一行缩进,保存,看是否自动对齐;若没反应,检查输出面板里
标签页是否有
类错误
非标准文件名(如
)需手动关联语言模式
插件默认只识别
和
。遇到
、
这类命名,VSCode 会当普通文本处理,补全、跳转、诊断全部失效。
打开该文件 → 点击右下角语言标识(如
)→ 选 “Configure File Association for ‘*.infra.tf’…”
输入
→ 回车 → 从列表选
更稳妥的方式是在工作区
中加这一行:
改完设置后,务必重新打开文件,或按
→ 输入 “Developer: Reload Window” 强制重载
最容易被忽略的是插件重启和 CLI 路径绑定这两步——90% 的“没提示”“不跳转”“格式化无效”问题都卡在这儿。别信“装完就能用”,HashiCorp 插件对环境状态很敏感,多花 30 秒确认右下角图标和
值,比后面反复排查快得多。
HashiCorp.terraformHashiCorpmattlymauveproviderresourcePlain Text.tfHCLHCL (unofficial)JSONHCLTerraformterraformterraformwhich terraformterraform versionPATHterraform.path/usr/local/bin/terraformC:\Program Files\terraform\terraform.exeeditor.formatOnSaveterraform.formatOnSaveeditor.formatOnSaveterraform fmteditor.formatOnSaveterraform.formatOnSavetrueeditor.defaultFormatterHashiCorp.terraformTerraformterraform fmt: exit code 1.infra.tf*.tf*.tfvarsmain.infra.tfbackend.azure.tfPlain Text*.infra.tfTerraformsettings.json"files.associations": {"*.infra.tf": "terraform", "*.tfvars.json": "terraform"}Ctrl+Shift+Pterraform.path