LSP默认不自动保存触发诊断,需在客户端配置中启用"diagnostics_on_save": true(如tsserver子项内),并设"save_before_build": true;该设置不可置于根层级或settings下,否则无效。

Sublime Text 的 LSP 自动保存触发怎么配
默认情况下,LSP(Language Server Protocol)插件 LSP 不会在保存时自动触发诊断(diagnostics),它依赖手动触发或编辑时的增量分析。要实现“保存即诊断”,必须显式启用 "save_before_build" 并配合 "diagnostics_on_save" —— 但注意:后者不是全局开关,而是按语言服务器单独配置的。
实操建议:
- 打开
Preferences → Package Settings → LSP → Settings,在用户设置中添加:
{
"save_before_build": true,
"clients": {
"pylsp": {
"enabled": true,
"settings": {
"pylsp.plugins.pyflakes.enabled": true,
"pylsp.plugins.pycodestyle.enabled": false
}
},
"tsserver": {
"enabled": true,
"settings": {
"typescript.preferences.includePackageJsonAutoImports": "auto"
},
"diagnostics_on_save": true // ✅ 关键:仅对 tsserver 生效
}
}
}
⚠️ 常见错误:把 "diagnostics_on_save": true 放在根层级或 "settings" 下,它会被忽略;必须放在具体 language server 的 client 配置内(如 "tsserver" 或 "pylsp" 对应的子对象里)。
LSP 诊断不显示、延迟高、只报错不报警告怎么办
诊断信息未出现,大概率是语言服务器没返回 severity 级别为 2(warning)或 1(info)的消息,或者 Sublime 的 LSP 插件过滤掉了低优先级提示。
排查与调优要点:
- 确认服务端是否实际发送 warning:打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),运行LSP: Toggle Log Panel,保存文件后观察日志里是否有"diagnostics"数组且含"severity": 2 - 检查
"show_diagnostics_severity_level"设置,默认是2(只显示 error 和 warning),设为1才能显示 info 级提示 - Python 用户若用
pylsp,需确保启用了对应插件(如pyflakes、rope),否则连 basic syntax error 都不会报 - 避免同时启用多个同语言服务(如
pylsp+pyright),容易冲突或覆盖诊断结果
为什么保存后诊断没刷新?和文件编码/路径有关吗
有关系。LSP 协议要求客户端将文件 URI 传给服务端,而 Sublime Text 在 Windows 上默认用 file:///C:/path,macOS/Linux 用 file:///Users/name/path。如果语言服务器内部做了 URI 校验或路径 normalize(比如某些旧版 tsserver),遇到带空格、中文、符号的路径可能静默失败。
可验证 & 缓解方式:
- 保存后立刻查看
LSP: Toggle Log Panel,搜索"textDocument/didSave"是否发出;若没发,说明 Sublime 没触发事件(可能是文件未被识别为该语言,检查右下角语法模式是否为JavaScript而非Plain Text) - 确保文件已保存为磁盘真实路径(未处于 “untitled” 状态),LSP 不处理无路径的临时 buffer
- Windows 用户若路径含中文,尝试将项目移到纯英文路径下测试,排除 URI 解码异常
如何让 LSP 诊断更准?绕过缓存或强制重载
LSP 客户端会缓存 document content 和 version,当编辑频繁或服务端状态不同步时,诊断可能滞后或错位。没有“一键刷新诊断”按钮,但有等效操作:
- 执行
LSP: Restart Servers(命令面板输入即可)—— 会 kill 当前 session 并重建,适合诊断彻底失灵时 - 对单个文件,先
Ctrl+S保存,再Ctrl+K, Ctrl+R(revert),再Ctrl+S,相当于重发didOpen+didSave - 禁用
"document_highlighting"或"semantic_tokens"等非必要功能(在 client settings 里设为false),可降低服务端负载,提升诊断响应速度
真正容易被忽略的是:LSP 的诊断生命周期绑定于文件 URI,而不是文件内容哈希。改名、移动、软链接切换都会导致服务端丢失上下文,此时必须重启 server 或重新打开文件。


















