必须确认terraform cli可用,否则lsp-terraform启动失败;终端运行terraform -v需输出v1.0.0或更高版本,windows路径含空格需显式配置shell_cmd,macos/linux需确保path包含brew安装路径,且lsp-terraform仅在含required_version或provider块的项目根目录生效。

装LSP-terraform前必须确认terraform CLI可用
没装或版本太低的terraform会导致LSP-terraform启动失败,报错类似language server crashed或failed to spawn terraform-ls。不是插件问题,是它根本找不到可执行文件。
- 终端运行
terraform -v,输出必须是Terraform v1.0.0或更高;低于v1.0的旧版不被terraform-ls支持 - Windows用户特别注意:如果
terraform.exe路径含空格(比如C:\Program Files\...),LSP-terraform默认会启动失败;此时需在LSP-terraform.sublime-settings里显式设"shell_cmd": null - macOS/Linux用户若用Homebrew安装,确保
brew install terraform后which terraform能返回路径;zsh/bash配置中PATH未包含/opt/homebrew/bin或/usr/local/bin时,Sublime可能无法继承环境变量
LSP-terraform配置文件必须放在项目根目录
LSP-terraform不是全局生效的,它只在检测到terraform { required_version = ... }或provider "aws" {}等块的目录下才自动激活。放错位置就等于没配。
- 打开你的Terraform项目根目录(即含
main.tf、providers.tf的文件夹),在Sublime里用Ctrl+Shift+P→LSP: Enable Language Server Globally无效,得选LSP: Enable Language Server for Current Project - 如果项目结构是
./envs/prod/main.tf,那LSP-terraform只在./envs/prod/目录下工作;父目录./envs/或./里不会触发 - 验证是否生效:光标停在
resource "aws_s3_bucket"上,按Ctrl+Shift+P→LSP: Show Hover,能弹出文档说明才算成功;否则检查terraform init是否已运行过(LSP-terraform依赖.terraform/里的provider schema)
补全和校验失效?检查LSP-terraform与语法插件的分工边界
很多人以为装了LSP-terraform就能高亮+补全+lint全包,其实它只负责后两项;.tf文件高亮仍由独立的语法插件(如Terraform by int128)提供,二者不耦合。
- 如果
main.tf还是灰色文字:右下角点击当前语法(显示“Plain Text”),选Terraform→Terraform;再执行View → Syntax → Open all with current extension as → Terraform,否则LSP连文件都识别不了 - 如果补全没反应但hover能显示:确认
LSP-terraform已启用(命令面板搜LSP: Toggle Server看状态),且main.tf里至少有一个provider块——没有provider,语言服务器认为这不是有效Terraform项目,直接跳过初始化 - 如果
terraform validate报错但LSP没提示:检查LSP.sublime-settings里"diagnostics_delay_ms"是否设得过大(默认500ms),调小到100可加快响应;同时确认"show_diagnostics_count_in_status_bar"为true,状态栏才能显示错误数
校验云端资源时别忽略terraform-ls的scope限制
terraform-ls(LSP-terraform背后的服务)只做静态分析,它不调用API、不读取state、不连接AWS/Azure等云账号。所谓“校验云端资源”,实际只是检查HCL语法 + provider schema兼容性 + 本地terraform plan能生成的变更预览。
- 它无法发现
aws_instance的AMI ID在AWS上是否真实存在,也不会报错azurerm_resource_group名字是否已被占用——这些必须靠terraform plan -out=plan.tfplan后人工审核或CI阶段执行 - 若想让LSP提示更贴近真实环境,可在项目根目录加
.terraform-version文件写入1.6.6,并确保required_version字段与之匹配;版本错位会导致schema加载失败,补全项大量缺失 - 真正需要“校验云端资源”的场景(比如检查S3 bucket是否跨区域复制启用),得配合
SublimeLinter-terraform-validate这类插件,在保存时自动跑terraform validate,而非依赖LSP-terraform的实时诊断











