sublime text的lsp补全需同时满足语言服务器运行、文件scope匹配(如source.python)、用户设置启用auto_complete_commit_on_tab三条件,缺一则静默失效,仅显示历史变量名。

Sublime Text 的 LSP 补全不是装完插件就自动生效的,它必须同时满足「语言服务器进程跑起来」「当前文件 scope 匹配」「用户设置里关键开关打开」三个条件,缺一就会静默失效——你看到的补全框里只有自己打过的单词,不是没配好,是根本没连上语义层。
右下角显示 Python 3 或 Plain Text,LSP 就不会启动
Sublime 不看文件后缀,只认当前语法(syntax)和作用域(scope)。哪怕你打开的是 main.py,右下角显示 Python 3 或 Plain Text,LSP 客户端就不会加载任何 Python 相关逻辑。
- 手动切语法:View → Syntax →
Python(不是Python 3),CSS 同理选CSS(不是CSS3或SCSS) - 查真实 scope:按
Ctrl+Alt+Shift+P(Windows/Linux)或Cmd+Alt+Shift+P(macOS),状态栏必须显示source.python,否则所有 LSP 配置都跳过 - 第三方语法包(如 Anaconda、Jedi)可能覆盖原生语法,临时禁用再测试
auto_complete_commit_on_tab 没开,Tab 永远只插缩进
这是最常被忽略的一行。LSP 补全弹出来了,但按 Tab 只进缩进、不选中高亮项,说明 Sublime 默认行为没被覆盖。
- 必须在 Preferences → Settings(右侧用户设置)中加:
"auto_complete_commit_on_tab": true - 顺手加上:
"auto_complete_with_fields": true(支持${1}类模板跳转) - 如果仍无效,检查是否被
AutoFileName或All Autocomplete插件劫持了Tab键行为,临时禁用测试
auto_complete_triggers 不配,. 和 : 后不会自动弹窗
原生补全默认不监听点号或冒号,LSP 也不会主动触发——必须显式告诉 Sublime:“在 Python 文件里输 .,就该扫一遍了”。
- 在用户设置中添加:
"auto_complete_triggers": [{"selector":"source.python","characters":"."}] - 注意
selector必须是source.python,不是text.python或python;CSS 补全则用{"selector":"source.css","characters":":"} - 别把
auto_complete_selector设成"source, text"——它会让补全在 Markdown 里乱弹,推荐用更精确的"source"
补全菜单没参数、没 docstring?pyright 没读到项目配置
pyright 默认以“宽松模式”运行,不读 pyproject.toml 或 pyrightconfig.json,类型推导直接降级,补全只剩变量名。
- 项目根目录必须存在空的
pyproject.toml或pyrightconfig.json(哪怕内容就一个{}) -
command字段不能只写["pyright", "--stdio"];要用npm install -g pyright安装,再用which pyright(macOS/Linux)或where pyright(Windows)取绝对路径填进去 - 用了虚拟环境?在
pyrightconfig.json中显式指定:{"pythonPath": "./venv/bin/python"}(macOS/Linux)或{"pythonPath": ".\venv\Scripts\python.exe"}(Windows)
真正卡住人的地方往往不是某一步错了,而是三件事同时成立:scope 对了、server 跑着、设置开了——但其中任意一个字段拼错(比如 source.python3)、路径少个斜杠、JSON 多了个逗号,LSP 就会彻底静默,控制台还不报错。验证时别只盯插件列表,要盯右下角状态栏有没有 LSP-pyright active,再盯控制台有没有 spawn ENOENT 或 Failed to start server。











