lsp插件无反应主因是语言服务器未启用、未安装或项目配置缺失;python需npm全局安装pyright并配置--stdio;ts需tsconfig.json;vue等文件需正确匹配scopes。

Sublime Text 装完 LSP 插件后为什么没反应?
多数人装完 LSP 插件(比如官方 LSP 包或 LSP-pyright)后,打开 Python 或 JavaScript 文件,没有补全、跳转、悬停提示——不是插件坏了,而是 LSP 服务本身没启动起来。
关键原因有三个:
-
LSP插件默认不自动启用任何语言服务器,必须手动配置language servers列表 - 对应语言的服务器二进制未安装(例如
pyright、typescript-language-server),仅装插件没用 - 项目根目录缺失
lsp-settings识别依据(如pyproject.toml、package.json),插件无法判断该不该激活服务
验证是否运行:打开命令面板(Ctrl+Shift+P / Cmd+Shift+P),输入 LSP: Show Log,看有没有类似 Starting pyright... 或 Connection closed 的日志。
如何为 Python 正确配置 pyright?
Python 是最常踩坑的语言。很多人用 pip install pyright 后仍不工作,因为 pyright 默认安装的是 CLI 工具,而 Sublime 的 LSP 插件需要的是它作为 Language Server 的入口(即支持 --stdio 协议)。
正确做法是:
- 用 npm 安装(推荐):
npm install -g pyright,确保全局可执行pyright - 在 Sublime 的
LSP.sublime-settings中添加如下配置段(注意command必须指向可执行文件,且含--stdio):
{
"pyright": {
"command": ["pyright", "--stdio"],
"enabled": true,
"languageId": "python",
"scopes": ["source.python"],
"syntaxes": ["Packages/Python/Python.sublime-syntax"]
}
}
如果用 Conda 环境,不能直接写 conda run -n myenv pyright --stdio —— Sublime 不支持 shell 解析,得包装成脚本或用 python -m pyright --stdio(前提是 pyright 已作为 Python 包安装)。
JavaScript/TypeScript 补全失效的常见原因
开一个 .ts 文件,LSP 显示已连接,但 Ctrl+Click 跳不到定义、无类型提示——大概率是没识别到项目上下文。
TypeScript 语言服务器严重依赖 tsconfig.json。没有它,服务器会降级为“单文件模式”,只做基础语法检查,不解析模块、不索引 node_modules。
解决路径:
- 在项目根目录放一个最小
tsconfig.json(哪怕只有{}) - 确认
LSP配置中typescript-language-server的command指向正确位置(如["typescript-language-server", "--stdio"]) - 禁用其他干扰插件:比如旧版
SublimeCodeIntel或JsFormat,它们可能劫持source.js语法或覆盖快捷键 - 检查
settings里是否误设了"initializationOptions": {"hostInfo": "sublime"}—— 新版服务器通常不需要这个,加了反而报错
为什么某些文件类型始终不触发 LSP?
比如打开 .vue 或 .astro 文件,LSP 图标不亮,补全完全空白。这不是插件不支持,而是 Sublime 没把文件关联到对应 languageId。
核心机制:LSP 插件靠 view.settings().get("syntax") 和 view.scope_name(0) 推断语言类型,再匹配配置里的 scopes 字段。
排查步骤:
- 按
Ctrl+Shift+P→ 输入Inspect Syntax,看当前视图的 scope 是什么(例如 Vue 单文件组件可能是source.vue或text.html.vue) - 去
LSP.sublime-settings查对应语言配置的scopes值,必须完全匹配(大小写敏感) - 若不匹配,可手动扩展:比如 Vue 支持 TypeScript,在
typescript配置块里加"scopes": ["source.ts", "source.vue", "source.tsx"] - 避免滥用通配符:写
"scopes": ["*"]会导致所有文件都走同一服务器,引发解析错误或卡顿
真正麻烦的从来不是装不上,而是服务器起来了、连接上了、日志也干净,但就是没响应——这时候八成是 scope 匹配失败,或者 languageId 和服务器期望的不一致。











