lsp配置失败主因是语言服务器未启动,需确认右下角显示lsp: pyright等标识、scope为source.python、command可手动执行且路径正确、syntaxes指向packages/python/python.sublime-syntax。

Sublime Text 的 LSP 配置失败,90% 不是插件问题,而是语言服务器根本没启动——command 路径错、scope 不匹配、或 syntaxes 指向了已废弃的旧语法文件。
右下角没显示 LSP: pyright 或类似标识
这是最直接的“服务器未启动”信号。LSP 插件本身不干活,只负责转发请求;没看到对应服务名,说明后端进程压根没起来。
- 按
Ctrl+Alt+Shift+P(Win/Linux)或Cmd+Alt+Shift+P(Mac),确认状态栏显示的是source.python,不是text.plain或source.python.django - 打开控制台(
Ctrl+`),搜Failed to start server或spawn ENOENT:前者代表命令执行失败(如参数错),后者代表二进制根本找不到 - 别信环境变量 PATH —— 在终端里手动运行配置里的
command数组(比如pyright --stdio),失败就填绝对路径;Windows 上单反斜杠C:path opyright.cmd会解析失败,必须用双反斜杠或正斜杠C:/path/to/pyright.cmd
syntaxes 和 scopes 配错导致整个配置被忽略
Sublime 的 LSP 客户端只靠这两个字段决定“要不要管这个文件”,写错一个字符,服务器连启动机会都没有。
-
syntaxes必须严格写成"Packages/Python/Python.sublime-syntax"——.tmLanguage是 Sublime 3 时代的旧格式,4+ 已弃用 -
scopes推荐只写["source.python"],别加其他变体(如source.python.django),除非你真在该 scope 下测试过 - 如果用了 Anaconda、SublimeCodeIntel 等老插件,它们可能覆盖原生 Python 语法;临时禁用后再试,看
Ctrl+Alt+Shift+P输出是否回归source.python
Python 补全只有变量名,没类型、没 docstring
这不是 LSP 配置漏了什么,是 pyright 启动在“宽松模式”下,自动放弃项目上下文推导。
- 项目根目录必须存在
pyproject.toml或pyrightconfig.json(哪怕内容为空{}),否则它不扫描 venv、不读类型提示、不索引第三方包 - 若用虚拟环境,
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取绝对路径填进去;用 pip 安装的pyright不支持--stdio协议
Tab 键不确认补全,光标只缩进
这是 Sublime 默认行为,和 LSP 无关,但常被误认为配置失败。
- 必须在用户设置(
Preferences → Package Settings → Settings – User)中显式开启:"auto_complete_commit_on_tab": true—— 缺它,补全框弹出来也白搭 - 同时确保
"auto_complete": true和"auto_complete_with_fields": true已启用,否则模板跳转(如${1})也不工作 - 检查是否被
AutoFileName或All Autocomplete劫持了 Tab:禁用这些插件再试;LSP 补全只响应原生auto_complete_commit_on_tab开关
最容易被忽略的点是:Sublime 不按文件后缀判断语言,只认当前文件的 scope 和 syntax;而这两者极易被第三方插件静默覆盖——哪怕配置全对,只要 Ctrl+Alt+Shift+P 显示的不是 source.python,所有 LSP 功能都形同虚设。











