sublime text lsp无补全跳转悬停空白,根本原因是语言服务器未启动,需确认package control已安装、lsp及对应服务器插件(如lsp-pyright)已装并全局启用、文件scope为source.python等有效值、command路径可执行且匹配系统环境。

Sublime Text 装完 LSP 插件后没补全、没跳转、悬停空白,不是配置漏了步骤,而是语言服务器根本没跑起来——LSP 客户端只是个管道,不带任何语义能力,所有“失效”都指向后端进程缺失、路径错误或作用域不匹配。
确认 Package Control 和 LSP 插件已真正就位
没它,后续所有操作都会静默失败。按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Package Control: Install Package 能弹出列表才算成功;如果提示 “command not found”,说明 Package Control 没装好。
必须手动安装一次:打开 View → Show Console,粘贴官方安装代码回车,重启 Sublime。之后再通过 Package Control 安装 LSP(作者 sublimelsp)和对应语言服务器插件(如 LSP-pyright 或 LSP-typescript)。
- 只装
LSP插件不装语言服务器,等于买了网线没接路由器——补全、跳转、悬停全部不会出现 -
LSP-pyright和旧插件Anaconda不能共存,会抢通道导致 CPU 飙升、签名不显示,冲突时直接禁用Anaconda - 装完服务器插件后,必须手动执行
LSP: Enable Language Server Globally并勾选对应项,否则右下角永远显示Plain Text
验证文件 scope 和 command 路径是否真实生效
Sublime 不看后缀,只认当前文件的 scope。按 Ctrl+Alt+Shift+P(Windows/Linux)或 Cmd+Alt+Shift+P(macOS),状态栏输出必须含 source.python、source.ts 等有效值;若显示 text.plain,所有 LSP 配置都会被忽略。
打开控制台(Ctrl+`),搜索 LSP 或 error,重点盯住:
-
Failed to start server: exit code 1—— 命令执行失败,常见于权限或参数错误 -
spawn pyright ENOENT或spawn tsserver ENOENT——command路径根本找不到 - 在终端里完整粘贴配置中的
command数组(如pyright --stdio),报command not found就得补PATH或换绝对路径
Windows 用户注意:tsserver 必须写 .cmd 后缀(如 tsserver.cmd),否则启动必败;路径含空格必须用双引号包裹整个路径(如 "C:/Users/My Name/AppData/Roaming/npm/pyright.cmd")。
Python 补全只有变量名?那是 pyright 在“宽松模式”下裸奔
pyright 默认不读项目配置,类型推导直接降级。补全没类型、没 docstring、import 解析失败,大概率是因为缺配置文件或路径错配。
- 项目根目录必须存在
pyrightconfig.json或pyproject.toml(哪怕空文件),否则它拒绝加载项目上下文 - 用了虚拟环境?
pyrightconfig.json里必须显式指定解释器路径:{"pythonPath": "./venv/bin/python"}(macOS/Linux)或{"pythonPath": ".\venv\Scripts\python.exe"}(Windows) -
command字段不能只写["pyright", "--stdio"]:全局安装的pyright是 npm 包,得先npm install -g pyright,再用which pyright(macOS/Linux)或where pyright(Windows)取绝对路径填进去 - 别在系统全局装 pyright —— 不同项目的 venv 版本可能冲突,推荐每个项目用本地
node_modules/.bin/pyright并填绝对路径
TS/JS 补全卡顿、JSX 不识别?tsserver 没加载到你的 tsconfig.json
问题不在 LSP 插件,而在 TypeScript 语言服务压根没读进项目配置。没有 tsconfig.json,tsserver 就 fallback 到全局扫描,耗时翻倍且 JSX/paths 全失效。
- 必须在项目根运行
npm install typescript --save-dev(即使你用 pnpm/yarn,也得有这个依赖) -
command不能只写["typescript-language-server", "--stdio"],要加initializationOptions显式告诉它tsdk路径:{"typescript.tsdk": "./node_modules/typescript/lib"} -
jsx支持依赖tsconfig.json中"jsx": "preserve"或类似设置;路径别名(paths)也必须在该文件中正确定义 - 如果用了
typescript-language-server,它的command推荐写成:["/usr/local/bin/node", "/path/to/node_modules/typescript-language-server/lib/cli.js", "--stdio"],避免 shell 解析歧义
最常被忽略的是 Sublime 的语法识别机制——它不看文件后缀,只认当前文件的 syntax 和 scopes,而这两者又极易被第三方插件覆盖或误判。一旦 scope 错,后面所有配置都白搭。











