lsp插件无提示是因为缺少对应语言服务器,需确认文件语法、手动测试命令、查看控制台日志;python推荐pyright,typescript需正确配置tsconfig.json和tsdk路径,js/ts应分设或精准匹配scope。

为什么装了LSP插件却没提示?
因为LSP插件本身不带任何语言服务器,它只是个“调度员”。你看到的“无定义”“补全只有关键字”“跳转失败”,几乎全是后端语言服务器没跑起来或没配对导致的。
常见现象包括:LSP: starting server 日志完全不出现、状态栏没显示语言名、Ctrl+Shift+Space 无响应、右键菜单里 LSP → Enable Language Server for this View 灰掉。
- 先确认当前文件语法是否匹配:按
Ctrl+Alt+Shift+P(Windows/Linux)或Cmd+Alt+Shift+P(macOS),看输出是否含source.python或source.ts;若显示text.plain,说明 Sublime 没识别出文件类型,syntaxes配置必然失效 - 检查命令是否能手动执行:在终端运行配置里的
command数组(如pylsp --help或typescript-language-server --stdio --help),报command not found就得补 PATH 或改用绝对路径 - 别忽略控制台日志:按
Ctrl+`打开 Sublime 控制台,搜索LSP或error,常有类似Failed to start server: exit code 1这类关键线索
Python 提示只显示变量名,不显示类型和 docstring?
默认 pylsp 功能较基础,推荐换用 pyright——它由微软维护,支持类型推导、泛型、PEP 561 包验证,且启动快、内存低。
安装和配置要点:
- 用
pip install pyright安装(无需[all]扩展) - 在
Preferences → Package Settings → LSP → Settings的"clients"下加这段:
{
"pyright": {
"command": ["pyright", "--stdio"],
"enabled": true,
"languageId": "python",
"scopes": ["source.python"],
"syntaxes": ["Packages/Python/Python.sublime-syntax"]
}
}
- 确保项目根目录有
pyrightconfig.json或pyproject.toml(哪怕空文件),否则 pyright 默认以“宽松模式”运行,类型信息会被弱化 - 如果用了 virtualenv,
pyright必须在该环境中安装,或在配置里用绝对路径指向虚拟环境内的pyright二进制
TypeScript 补全卡顿、JSX 不识别、路径别名失效?
根本原因在于 tsserver 没读到项目级 tsconfig.json,或读到了但解析失败。全局安装的 typescript-language-server 默认不关心你项目里的 node_modules/typescript。
必须强制它走 workspace tsdk:
- 在项目根目录运行
npm install typescript --save-dev(哪怕你用 pnpm/yarn) - 打开
Preferences → Package Settings → LSP-typescript → Settings,填入:
{
"command": ["npx", "--no-install", "tsc", "--serve"],
"initializationOptions": {
"typescriptVersion": "useWorkspaceTsdk"
}
}
-
tsconfig.json必须放在项目最外层目录;子目录下放的配置不会被加载 -
"jsx"字段必须是"preserve"或"react-jsx",设成"react"会丢掉 JSX 元素的类型信息 -
"baseUrl"+"paths"要配合"moduleResolution": "node"才生效,否则@/utils这类 alias 根本不会进补全候选
如何让 LSP 同时支持 .js 和 .ts 文件?
不能靠一个 server 同时覆盖两种语言 ID,javascript 和 typescript 是两个独立 languageId。强行合并会导致 JS 文件加载 TS 类型逻辑,或 TS 文件失去 JSX 支持。
正确做法是启用两个 client,并精细控制 scope:
- 用
typescript-language-server处理.ts、.tsx、.js、.jsx(注意:它原生支持 JS with JSDoc) - 在
"scopes"中同时写["source.js", "source.jsx", "source.ts", "source.tsx"] - 但需排除纯 HTML 内联脚本:加
"selector": "source.js - meta.tag.inline.any.html"(Sublime 的 selector 语法,防误触发) - 如果项目中 JS 文件较多且无 JSDoc,建议单独为
.js启用更轻量的javascript-typescript-stdio(通过LSP-javascript插件自动管理)
真正容易被忽略的是:LSP 的 scope 匹配发生在文件打开瞬间,一旦语法识别错误(比如 .js 文件被当成 source.js.jquery),后续所有 server 都不会启动。所以每次配完,务必用 Ctrl+Alt+Shift+P 确认 scope 是否精准。











