lsp插件仅是管道,功能依赖语言服务器进程正常启动;需检查状态栏显示、文件scope、控制台错误及command配置正确性。

装完 LSP 插件不等于有补全、跳转或悬停——它只是个管道,真正干活的是你手动配的语言服务器进程。没启动、路径错、scope 不对,功能就全哑火。
右下角没显示 LSP: pyright 或 LSP: clangd?先查这三件事
状态栏只显示 LSP: ready 或干脆空白,说明语言服务器根本没起来。这不是插件问题,是通信链路断了。
- 按
Ctrl+Alt+Shift+P(Win/Linux)或Cmd+Alt+Shift+P(macOS)看当前文件scope:必须是source.python、source.c++、source.ts等有效值,不是text.plain - 打开控制台(
Ctrl+`),搜Failed to start server或spawn ENOENT:前者代表启动失败(比如配置里写了pyright但没装),后者代表命令根本找不到(PATH 没生效) - 在终端里手动执行配置里的
command数组,例如pyright --stdio或/opt/homebrew/opt/llvm/bin/clangd --background-index:报command not found就得补 PATH 或改用绝对路径
command 字段写错一个斜杠,LSP 就静默失败
Windows 上写 "command": ["C: oolsclangd.exe"] 是无效的——反斜杠会被当转义符解析。Sublime 的 JSON 不支持裸反斜杠。
- 正确写法是双反斜杠:
"C:\tools\clangd.exe",或统一用正斜杠:"C:/tools/clangd.exe" - macOS/Linux 用户注意 M1/M2 默认 Homebrew 路径是
/opt/homebrew/bin,不是/usr/local/bin;装了pyright却找不到,大概率是这个原因 -
command必须是数组,不能是字符串:["pylsp"]✅,"pylsp"❌ - 某些服务器需要额外参数,比如
clangd推荐加--background-index,typescript-language-server必须配initializationOptions指定typescript.tsdk路径,否则 JSX 和类型推导直接降级
Python 补全只有变量名,不显示类型和 docstring?不是 LSP 配错了,是 pyright 没读配置
pyright 默认以“宽松模式”启动,不加载项目根目录下的 pyrightconfig.json 或 pyproject.toml,类型检查和文档提示全失效。
- 项目根目录放一个空的
pyrightconfig.json文件就能强制它进严格模式 - 如果用了虚拟环境,
pyrightconfig.json里要显式指定 Python 路径:{"pythonPath": "./venv/bin/python"}(macOS/Linux)或{"pythonPath": ".\venv\Scripts\python.exe"}(Windows) - 别依赖全局安装的
pyright:npm 包和 pip 包是两套,LSP-pyright插件默认找 npm 版;若用 pip 安装的python-lsp-server,就得配command为["pylsp"],且确保pylsp在 PATH 中
C/C++ 跳转失效、补全为空?90% 是 compile_commands.json 没到位
clangd 不靠猜,它靠编译数据库理解宏、模板、第三方头文件路径。没有 compile_commands.json,或者位置不对,就只能做基础语法分析。
- CMake 项目构建时加
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,生成的compile_commands.json默认在build/目录下 - 如果文件不在项目根目录,必须在 LSP 配置中显式告诉 clangd:
"initializationOptions": {"compilationDatabasePath": "build"} - 别把
compile_commands.json放进子目录再配相对路径——clangd 解析路径是相对于项目根的,不是相对于配置文件 - 用 Makefile 或 Ninja 的项目,可用
compiledb工具生成:pip install compiledb && compiledb make
最常被忽略的不是配置写法,而是 Sublime 的语法识别机制:它不看文件后缀,只认当前文件的 syntax 和 scope。一个 .cpp 文件如果右下角显示的是 Plain Text,哪怕 command 和 compile_commands.json 全对,clangd 也不会启动。











