
为什么 goto_definition 按了没反应
不是快捷键失效,大概率是 LSP 服务根本没起来,或者当前文件没被语言服务器识别为有效源码。常见现象是光标停在函数名上,按 ctrl+click 或 F12 没任何反馈,状态栏也不显示“Indexing…”或语言标识。
- 检查右下角状态栏:必须看到类似
Python、typescript这样的语言标识,且旁边有小圆点变绿——代表 LSP 客户端已连接到服务 - 确认文件后缀和
view.settings().get("syntax")匹配,比如.py文件不能被设成Plain Text语法 - 打开 Sublime 的控制台(
ctrl+`),搜LSP或stderr,常能看到类似"command 'pylsp' not found"的报错,说明服务二进制没装或路径不对
安装 LSP 和对应语言服务器的最小可行步骤
别碰“LSP-XXX”一堆插件,只装两个核心:LSP 插件本身 + 对应语言的官方服务器。以 Python 为例,其他语言同理替换关键词。
- 用 Package Control 安装
LSP(不是LSP-pyright等封装版) - 终端执行:
pip install python-lsp-server[all](确保pylsp命令能全局调用) - 在 Sublime 中打开
Preferences → Package Settings → LSP → Settings,填入:{ "clients": { "pylsp": { "command": ["pylsp"], "enabled": true, "languageId": "python", "scopes": ["source.python"], "syntaxes": ["Packages/Python/Python.sublime-syntax"] } } } - 重启 Sublime,打开一个
.py文件,等右下角出现绿色小点再试跳转
goto_definition 跳过去却停在 stub 文件里
这是 pylsp / pyright 默认行为:优先跳转到类型存根(.pyi)而非实际实现,尤其对标准库和 pip 包。不是配置错,是设计如此。
- 按
alt+F12(goto_reference)常能绕过 stub,直接定位到真实定义处 - 如果坚持要禁用 stub 跳转,在 LSP 设置里加
"configurationSources": ["pylsp"]并确保没启用mypy或pyright的 stub 支持 - 更实用的做法:跳进去后看文件路径,如果是
site-packages/xxx.pyi,就手动删掉i后缀再打开对应.py文件——很多包其实自带源码
JavaScript/TypeScript 怎么让 goto_definition 正确识别 node_modules
默认情况下,LSP 不会索引 node_modules,导致跳转失败或指向声明文件。关键不在“能不能”,而在“要不要”——全量索引会卡死,必须精准控制范围。
- 不要全局启用
node_modules,而是在项目根目录放jsconfig.json或tsconfig.json,并确保"include"包含你真正要跳转的模块路径 - 在 LSP 设置中为
typescript-language-server加上"initializationOptions": {"prettify": false},避免某些版本因格式化参数崩溃导致服务退出 - 遇到跳转到
node_modules/.pnpm/xxx里 symlink 断链的情况,用pnpm store path查真实路径,然后在 LSP 配置里加"settings": {"typescript.preferences.includePackageJsonAutoImports": "auto"}
goto_definition 在不同项目里表现差异大,往往是因为 tsconfig.json 有没有配 baseUrl,或者 pyproject.toml 里有没有写对 [tool.pylsp]。这些细节不报错,但直接决定跳不跳得准。











