sublime的lsp补全需同时满足package control已安装、语言服务器可执行且路径正确、当前文件scope与配置严格匹配三条件;缺一则静默失效,无错误提示。

Sublime 的 LSP 补全不是装个插件就自动跑起来的,它必须同时满足三个硬条件:Package Control 已就位、语言服务器进程能被 Sublime 正确调起、当前文件的作用域(scope)和配置完全匹配——缺一就会静默失效,连错误提示都不给。
Package Control 没装好,后面全白搭
按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS)输入 Package Control: Install Package,如果命令不出现,说明 Package Control 根本没装。别跳过这步直接搜 LSP。
- 打开
View → Show Console,粘贴官方安装脚本(含哈希校验),回车执行 - 执行完必须重启 Sublime,否则新插件无法加载
- 重启后再次按
Ctrl+Shift+P验证命令是否可触发
LSP 插件装了但状态栏没显示 LSP-pyright active
这是最明确的“语言服务器根本没启动”信号。LSP 插件本身不提供任何补全能力,它只是个通信桥;没连上服务器,补全菜单里就只有你打过的变量名。
- 先确认右下角语法显示是
Python(不是Python 3或Plain Text),按Ctrl+Alt+Shift+P看状态栏是否输出source.python - 打开控制台(
Ctrl+`),搜索LSP或error,重点看有没有Failed to start server或spawn pyright ENOENT - 在终端手动运行配置里的
command数组(如pyright --stdio),报command not found就得补 PATH 或改用绝对路径
补全弹窗不弹、Tab 不确认、. 后没反应
这些表象背后其实是三类独立设置问题,不能混为一谈:
-
"auto_complete_commit_on_tab": true必须加进用户设置(Preferences → Settings右侧),否则 Tab 永远只插缩进,不会选中高亮项 -
"auto_complete_triggers"要显式声明,例如:[{"selector":"source.python","characters":"."}];注意selector必须是source.python,不是text.python或python - 如果用了
AutoFileName或All Autocomplete,它们会劫持 Tab 行为,临时禁用测试是否冲突
Python 补全只有变量名,没参数、没 docstring
pylsp 默认功能有限,pyright 是更优解,但它对项目结构敏感,不配对就降级为“猜”:
- 用
npm install -g pyright安装(不是 pip),再用which pyright(macOS/Linux)或where pyright(Windows)取绝对路径填进command字段 - 项目根目录必须存在
pyrightconfig.json或pyproject.toml(哪怕空文件),否则以宽松模式运行,类型推导直接失效 - 若用了虚拟环境,
pyrightconfig.json中需显式指定{"pythonPath": "./venv/bin/python"}(macOS/Linux)或{"pythonPath": ".\venv\Scripts\python.exe"}(Windows)
最容易被忽略的是作用域匹配细节:比如 Vue 单文件中的 <script></script> 块 scope 是 source.js.embedded.html,不是 source.js;CMake 项目没加 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 就生成不了 compile_commands.json,clangd 就只能靠猜——这些地方错一个字符,LSP 就彻底静默。











