根本原因是lsp-terraform依赖本地terraform cli(≥1.0),且需terraform -v可执行;若cli未安装、路径错误、版本过低或项目无required_version/provider块,lsp将静默失败,导致补全和诊断失效。

为什么装了LSP-terraform还是没补全和诊断?
根本原因不是插件没装对,而是 LSP-terraform 依赖本地 terraform CLI 可执行文件,且版本必须 ≥ 1.0。它不自带二进制,只负责下载、启动和通信。如果 terraform -v 命令在终端报错或输出为空,LSP-terraform 就会静默失败——你不会看到错误提示,但状态栏不显示“Terraform LS”,补全、hover、诊断全无响应。
- 运行
terraform -v确认 CLI 已安装且在PATH中;Windows 用户特别注意:路径含空格(如C:\Program Files\...)会导致启动失败,此时必须在 LSP 配置中显式设"shell_cmd": null -
LSP-terraform默认只在项目根目录存在terraform { required_version = ... }或provider "registry.terraform.io/hashicorp/..."块时才激活,空目录或仅含variables.tf的目录不会触发 - 确保已通过 Package Control 安装的是
LSP-terraform(不是Terraform单字包,也不是HCL),它会自动拉取并管理terraform-ls语言服务器
如何让 .tf 文件真正被 LSP-terraform 识别?
LSP 客户端本身不处理文件后缀绑定,它依赖 Sublime 的语法识别结果来决定是否启用某语言服务器。也就是说:即使 LSP-terraform 装好了,如果 main.tf 当前语法被识别为 Plain Text 或 HCL(社区插件),LSP 就不会把它当作 Terraform 项目来处理。
- 必须将
.tf文件手动绑定到HashiCorp Terraform语法(不是HCL,也不是Terraform by int128):打开任意.tf文件 → 右下角点击当前语法名 →Open all with current extension as…→ 选HashiCorp Terraform -
.tfvars、.auto.tfvars同样需要单独绑定,LSP-terraform不会自动扩展匹配 - 检查
Preferences > Package Settings > LSP > Server Configurations中terraform配置项是否启用("enabled": true),默认是开启的,但有人会误关
补全卡顿、hover 显示慢,怎么调?
terraform-ls 在首次加载大型模块(尤其是含远程 registry 模块或大量 for_each 的配置)时会做 schema 解析和缓存构建,这个过程可能阻塞 UI 或导致补全延迟数秒。这不是网络问题,而是本地解析开销。
- 在
Packages/User/LSP.sublime-settings中为terraform服务添加"initializationOptions",关闭非必要功能:{ "clients": { "terraform": { "initializationOptions": { "experimentalFeatures": { "hoverProvider": false, "completionProvider": true } } } } } - 避免在根目录放超大
modules/目录;terraform-ls默认扫描整个工作区,可改用"folder_exclude_patterns"排除无关子目录 - Windows 上若使用 WSL2 作为 terraform CLI 后端,延迟会显著增加,建议直接用 Windows 原生
terraform.exe
状态栏不显示 “Terraform LS” 或反复断连?
这是最常被忽略的信号:LSP-terraform 启动失败或连接中断,但 Sublime 不弹错误框。你需要主动查日志,而不是等它“自己好起来”。
- 打开命令面板 → 输入
LSP: Toggle Log Panel,复现操作(比如保存.tf),看是否有stderr输出或connection closed日志 - 常见断连原因:CLI 版本不兼容(如用
terraform 1.9.x连旧版terraform-ls)、项目内versions.tf写了不支持的约束(如>= 1.0.0, 但实际装了 2.0+)、Windows 杀毒软件拦截 <code>terraform-ls进程 - 临时验证是否是环境问题:在终端进入项目根目录,手动运行
terraform-ls serve,看是否能正常启动并监听localhost:43673等端口
terraform -v 这类基础命令交叉验证,而不是反复重装插件。











