lsp在sublime中需package control就位、语言服务器可执行、文件scope与selector严格匹配三者同时满足,缺一则补全/跳转/悬停静默失效;scope错配最常见,须用developer: show scope name确认实际值并精确配置selector。

LSP 在 Sublime Text 里不是开箱即用的功能,它依赖三重对齐:Package Control 必须就位、语言服务器二进制必须可执行、当前文件的 scope 必须与配置中 selector 完全匹配——任一错位,补全/跳转/悬停全部静默失效,且不报错。
为什么改了 LSP 设置却没反应?selector 匹配错了
Sublime 的 LSP 不看文件后缀,只认当前文件的语法作用域(scope)。比如打开一个 .py 文件,右下角显示 Python,但按 Ctrl+Alt+Shift+P(Windows/Linux)或 Cmd+Alt+Shift+P(Mac)看到的可能是 source.python.django 或 source.python.embedded.html,而不是基础的 source.python。
-
selector必须精确覆盖实际 scope,例如 Django 模板里的 Python 片段需写"selector": "source.python.django",否则 pylsp 根本不会启动 - 多个 scope 用英文逗号分隔,如
"source.ts, source.tsx";用空格或|是无效的(那是 CSS 选择器写法) - HTML 中的
<script></script>块默认是source.js.embedded.html,不是source.js,Tailwind 提示在 Vue 单文件组件里失效,往往就是漏了source.js.embedded.html - 验证方式:打开目标文件 →
Ctrl+Shift+P→ 输入Developer: Show Scope Name,复制输出的第一行 scope 作为 selector 值
command 路径写错的典型表现和修复
常见错误不是“找不到命令”,而是“找到命令但启动失败”——比如 pyright 启动后立刻退出,日志里只显示 connection closed。根本原因常是 PATH 隔离或参数缺失。
- Sublime 启动时不会加载 shell 的
PATH,所以["pyright"]在终端能运行,但在 Sublime 里会报ENOENT - 推荐写绝对路径:
["/Users/you/.local/bin/pyright-langserver", "--stdio"](macOS/Linux)或["C:/Users/you/AppData/Roaming/npm/pyright-langserver.cmd", "--stdio"](Windows) - Windows 上避免单反斜杠:
"C:Users..."会被解析为转义字符,必须用双反斜杠"C:\Users\..."或正斜杠"C:/Users/..." - 某些服务器(如
tailwindcss)依赖项目根目录下的tailwind.config.js,若command启动路径不对,它读不到配置——此时应在initializationOptions中显式指定configPath
多个 LSP 服务器共存的关键约束
Sublime-LSP 默认只启用第一个匹配 selector 的 client,后定义的同 scope 服务器直接被忽略。这不是 bug,是设计逻辑:它按 selector 做路由,不是按项目做隔离。
- 两个 Python 服务器(如
pylsp和ruff-lsp)不能都设"selector": "source.python",否则只有后者生效 - 可行解法有两种:
– 错开 selector,例如让ruff-lsp只处理source.python.ruff(需配合自定义语法高亮)
– 用enabled+settings控制能力边界,例如pylsp负责补全/跳转,ruff-lsp仅开启"diagnostics": true且"completion": false - JavaScript 场景更典型:TypeScript 项目里
typescript-language-server应匹配source.ts, source.tsx,而普通 JS 文件交给deno lsp或biome lsp,靠selector划清职责 - 禁用某个 server 不要删配置,设
"enabled": false即可,避免重启后配置丢失
真正容易被忽略的底层细节
最隐蔽的问题往往不在 LSP 配置本身,而在 Sublime 的运行上下文里:
- Sublime Text 4 build elixir-ls、
rust-analyzer等依赖 workspace 初始化的服务器无法加载依赖或跳转定义 - 右下角显示
Plain Text时,LSP 一定不工作——这不是 LSP 插件问题,是语法包未注册或路径错误,先解决语法再调 LSP -
auto_complete_commit_on_tab和auto_complete_triggers是 Sublime 原生设置,不属于 LSP 配置,但缺它们,LSP 补全菜单即使弹出也无法用 Tab 确认 - LSP 日志(
LSP: Toggle Log Panel)里出现stderr输出,说明服务器进程已启动但主动退出,这时该去终端手动运行command数组看具体报错,而不是反复改 JSON











