LSP跳转延迟主因是语言服务器冷启动与同步阻塞操作,如pyright首次扫描venv或tsserver未加载tsconfig.json;需通过配置pyproject.toml、限制include/exclude范围、禁用stub优先及显式指定tsdk路径来优化。

LSP 插件本身不解决跳转延迟,真正卡住的是语言服务器启动、初始化或响应链——Python 项目里 goto_definition 卡 3 秒,大概率不是 Sublime 设置问题,而是 pyright 还没读完 pyproject.toml 或正在解析 venv 里的 200 个包。
为什么 LSP 跳转总要等好几秒才响应
这不是网络或 UI 延迟,是语言服务器在做同步阻塞操作:加载配置、扫描依赖、构建 AST。尤其对 Python 和 TypeScript,首次跳转几乎必然触发冷启动。
-
pyright第一次跳转会扫描整个venv,如果venv里装了django+requests+numpy,它得逐个解析.pyi和源码 -
typescript-language-server启动时若没找到tsconfig.json,会 fallback 到全局node_modules扫描,耗时翻倍 - 跳转请求发出去后,Sublime 等的是 server 返回,不是自己渲染慢;控制台里看到
LSP: request sent但没response,说明卡在后端 - 跨文件跳转(比如从
utils.py跳到models.py)比同文件内跳转慢 2–5 倍,因为涉及模块路径解析和符号重绑定
如何让 Python 跳转快起来(pyright 场景)
关键不是调 auto_complete_delay,而是砍掉 pyright 的初始化负担。
- 项目根必须有
pyrightconfig.json或pyproject.toml,哪怕空文件——否则 pyright 默认启用“宽松模式”,类型推导降级且扫描更激进 - 在
pyrightconfig.json中显式限制扫描范围:{"include": ["src", "app"], "exclude": ["tests", "migrations", "node_modules"]} - 禁用 stub 优先(避免跳进
site-packages/requests/py.typed):{"useLibraryCodeForTypes": false} - 如果用了虚拟环境,
command字段不能只写["pyright", "--stdio"],得用绝对路径指向 venv 里的二进制:["/path/to/venv/bin/pyright", "--stdio"] - 别在
venv外全局安装 pyright——不同项目 venv 里版本可能冲突,导致 server 启动失败或缓存错乱
TS/JS 跨文件跳转卡顿的硬解法
不是 LSP 插件配错了,是 tsserver 根本没加载你项目的上下文。
-
typescript-language-server的command必须带initializationOptions,明确告诉它 tsdk 路径:{"command": ["/usr/local/bin/node", "/path/to/node_modules/typescript-language-server/lib/cli.js", "--stdio"], "initializationOptions": {"typescript.tsdk": "./node_modules/typescript/lib"}} - 项目根必须存在
tsconfig.json,且至少含{"compilerOptions": {"allowJs": true}}——没有这个,server 会拒绝为.js文件提供跳转 -
paths别名生效的前提是baseUrl正确设置,并且所有路径都相对于baseUrl;jsx支持需额外加"jsx": "preserve" - 如果用 pnpm/yarn,
node_modules/typescript可能被提升或硬链接,此时typescript-language-server读不到lib目录,必须手动pnpm install typescript --save-dev补全
LSP 跨语言跳转失败的隐藏原因
跳转失效常被归咎于“没配好 server”,其实更多是 scope 和 syntax 错配,Sublime 根本没把当前文件交给对应 server 处理。
- 按
Ctrl+Alt+Shift+P(Windows/Linux)或Cmd+Alt+Shift+P(macOS)确认当前 scope 是source.python或source.ts,不是text.plain或source.js(TypeScript 文件误识别为 JS 就不会走typescript-language-server) -
syntaxes字段必须严格匹配 Sublime 4+ 的新路径:"Packages/Python/Python.sublime-syntax",旧版路径如Packages/Python/Python.tmLanguage已失效 - C/C++ 项目必须生成
compile_commands.json并放在项目根目录,clangd 不支持递归查找——放错位置或路径不对,跳转就永远返回 “No definition found” - 多个 server 共存时(比如同时配了
pyright和pylsp),确保只启用一个;enabled设为false比删配置更安全,避免语法冲突
最易被忽略的点:LSP 的跳转行为完全由语言服务器定义,Sublime 只转发请求和渲染结果。改来改去没效果,先看右下角是否显示 LSP: pyright 或 LSP: clangd;不显示,说明根本没连上——所有优化都白搭。


















