lsp插件本身不决定跳转快慢或补全准确性,真正起作用的是command能否运行、selector与文件scope是否严格匹配、语言服务器是否正确初始化;配置错一个字段就会导致“已启用但没反应”。

Sublime Text 的 LSP 插件本身不决定跳转快慢、补全准不准、跨语言是否生效——真正起作用的是你配的 command 能不能跑起来、selector 和当前文件 scope 严不严格匹配、语言服务器自身有没有被正确初始化。配置错一个字段,LSP 就是“已启用但没反应”。
为什么 LSP 跳转总卡在 “initializing…” 或根本没响应
这不是 Sublime 卡,是语言服务器进程压根没启动成功,或启动了但拒绝响应请求。最常见原因有三个:
-
command路径错误:写成["pyright"]却没把 pyright 加进$PATH,日志里会报spawn pyright ENOENT;Windows 上漏掉.cmd后缀也会失败 -
selector不匹配:文件右下角显示source.python.django,但配置里只写了"selector": "source.python",结果 LSP 客户端根本不发请求 - 语言服务器冷启动阻塞:比如
pyright首次扫描整个venv,或tsserverfallback 到全局node_modules扫描,这时 LSP 日志能看到LSP: request sent但无response
多个语言服务器共存时为啥只启了一个
因为 selector 冲突了——LSP 按 selector 匹配客户端,不是按项目路径。两个 client 都设 "selector": "source.python",后加载的那个会覆盖前一个。
- 查当前文件真实 scope:按
Ctrl+Alt+Shift+P(Win/Linux)或Cmd+Alt+Shift+P(Mac),状态栏显示的就是实际 scope - Python + Ruff-LSP 共存?别都用
source.python:让 ruff-lsp 专管诊断,用"selector": "source.python - meta.function"或加"enabled": false+ 条件触发 - TypeScript 和 JavaScript 分开?
source.ts对应.ts,source.jsx对应.jsx,别全塞进source.js
Pyright / pylsp / clangd 跳转慢的根本解法
不是调 auto_complete_delay,是砍掉语言服务器的初始化负担。不同语言的关键控制点不一样:
-
Pyright:必须有
pyrightconfig.json或pyproject.toml,哪怕空文件;"exclude"显式过滤tests、migrations;禁用 stub 优先:{"useLibraryCodeForTypes": false} -
pylsp:避免全局安装,改用项目级
pip install --user python-lsp-server[all];禁用无用插件:"plugins": {"jedi_completion": false, "rope": false} -
clangd:必须有
compile_commands.json,且路径要对;若放在build/下,配置里得加"initializationOptions": {"compilationDatabasePath": "build"}
TS/JS 跨文件跳转失效的硬核排查点
不是 LSP 插件没配好,是 tsserver 根本没加载你的项目上下文。关键信号是:打开 .ts 文件后状态栏显示 LSP-typescript initializing… 卡住超过 5 秒。
- 确认
tsserver可执行:终端运行npx tsc --version,再查which tsserver(macOS/Linux)或where tsserver(Windows) - Windows 必须带
.cmd后缀:"command": ["C:/Users/xxx/AppData/Roaming/npm/tsserver.cmd"] - 项目根目录必须有
tsconfig.json;没有就生成一个最小配置:{"compilerOptions": {"allowJs": true}} - 别在
LSP.sublime-settings里配LSP-typescript,要去Preferences → Package Settings → LSP → Servers → LSP-typescript单独配
最易被忽略的一点:所有配置里的 command 路径,只要含空格或中文,就必须用双引号包裹整个字符串;Windows 上混用单反斜杠和正斜杠会导致路径解析失败——这不是 Sublime 的 bug,是 JSON 字符串和操作系统路径语义的交叉地带。











