Sublime Text 本身不提供 Scala 语法提示、跳转定义或符号索引,必须依赖 LSP 协议及 metals 语言服务器;90% 的无提示问题源于 PATH 未继承、metals 未安装/不可调用、项目结构缺失 build.sbt 或 JDK 配置错误。

Sublime Text 本身不提供 Scala 语法提示(autocomplete)、跳转定义(goto definition)或符号索引(symbol indexing),所谓“语法提示增强”必须依赖外部语言服务器(LSP)或已废弃的 Ensime;但绝大多数用户装完插件后依然没提示,根本原因不是插件选错,而是 LSP 客户端没配、服务端没启、或 PATH 不通导致 metals 启动失败。
为什么装了 LSP 插件也没语法提示?
LSP(Language Server Protocol)是 Sublime Text 实现智能提示的唯一现代路径,但它的运行依赖三个独立环节全部就绪:
-
lsp_metals插件必须通过 Package Control 安装(搜 “LSP-metals”,作者 rafamel),不是 “LSP” 或 “ScalaSyntax” - 本地必须已安装
metals语言服务器(推荐用coursier安装:cs install metals),且which metals有输出 - Sublime 必须能调用到
metals——这又回到老问题:GUI 启动时 PATH 不继承,metals在终端可用,但在 Sublime 控制台里import os; print(os.environ.get('PATH'))找不到它 - 项目根目录下必须有
build.sbt或project/目录,否则metals启动后会静默退出,LSP 客户端显示 “server crashed” 却不报错
如何验证 metals 是否真被 Sublime 调用?
不能只看状态栏有没有 “LSP” 图标,要确认进程和日志:
- 在 Sublime 中按
Ctrl+`打开 Python 控制台,执行import subprocess; subprocess.run(['metals', '--help']),若报FileNotFoundError,说明 PATH 没通 - 打开
Preferences → Package Settings → LSP → Settings,确保"clients": {"metals": {"enabled": true}},且未禁用"initializationOptions" - 检查
~/.metals/metals.log(Linux/macOS)或%LOCALAPPDATA%\Metals\metals.log(Windows),常见错误如Failed to resolve JDK表示metals找不到 JDK,需在 LSP 设置中显式指定"java-home"
metals 构建失败时提示 “no build target” 怎么办?
这不是 Sublime 或插件的问题,而是 metals 无法解析你的构建定义。典型场景包括:
- 项目是纯
.scala文件,没有build.sbt或project/build.properties——metals不支持“裸文件”模式,必须有 SBT 或 Bloop 构建描述 -
build.sbt里用了scalaVersion := "3.3.3",但本地没装对应版本 JDK(Scala 3 要求 JDK 11+,且metals需要java命令可执行) - 第一次打开项目时没等
metals下载依赖(状态栏显示 “Importing build…”),就急着写代码——此时符号表为空,自然无提示 - 误把
src/main/scala当作项目根目录打开,实际应打开含build.sbt的父目录;否则metals根本不会启动
真正卡住人的从来不是“怎么装”,而是 metals 启动后既不报错也不工作——它默认静默失败,连日志都得手动翻。PATH、JDK、项目结构、启动方式,四者缺一不可,漏掉任意一个,语法提示就只是个图标。


















