最常见原因是lsp插件根本没启动ruff-lsp,而非配置错误;需确认python文件scope为source.python、command路径可执行(用which/where验证)、避免与pylsp共用相同selector,且pyproject.toml必须含[tool.ruff]段并位于项目根目录。

为什么ruff-lsp在Sublime里没反应
最常见原因是LSP插件根本没启动ruff-lsp,而不是配置写错了。Sublime的LSP插件只按selector匹配语法作用域,不看文件路径或项目结构——如果你的Python文件当前scope不是source.python(可用Ctrl+Shift+P → Developer: Show Scope Name确认),整个配置就形同虚设。
另一个高频问题是command路径失效:ruff-lsp命令找不到,或者启动后立刻退出。打开Sublime控制台(Ctrl+`),搜Failed to start server或spawn ENOENT,基本就能定位是PATH问题还是二进制缺失。
- 用
which ruff-lsp(macOS/Linux)或where ruff-lsp(Windows)查真实路径,填进配置里时用绝对路径,别信环境变量 - 确保
ruff-lsp --version能在终端里直接运行成功,否则Sublime也跑不起来 - 不要和
pylsp共用"selector": "source.python"——后者会静默覆盖前者,除非你明确用enabled做条件开关
怎么配clients让ruff-lsp只管诊断不管跳转
Sublime的LSP.sublime-settings里,clients是个对象,每个键是服务器名,值是具体配置。想让ruff-lsp专注 lint 和 fix,而把补全、定义跳转留给pyright,就得拆开职责:
-
ruff-lsp的selector保持"source.python",但关掉它不擅长的能力:"settings": {"serverSettings": {"enableHover": false, "enableDefinition": false}} -
pyright也用"source.python",但通过"enabled": true和更细粒度的initializationOptions接管语义功能 - 两者不冲突的前提是:它们的
command都能独立执行,且没有其他client抢走source.python的控制权
注意ruff-lsp默认不提供hover或goto definition,强行开启反而可能报错或无响应——它的设计就是轻量诊断,别硬塞它干不了的活。
ruff-lsp的Fix All为什么只修了一半
默认情况下ruff-lsp的Fix all只应用“安全修复”,比如未使用导入、多余空行、PEP8缩进;像重命名变量、修改函数签名这类可能影响逻辑的改动,它会跳过。这不是bug,是设计选择。
如果你确定要激进修复,得在LSP配置里透传--unsafe-fixes参数:
"ruff-lsp": {
"command": ["/usr/local/bin/ruff-lsp"],
"selector": "source.python",
"settings": {
"args": ["--unsafe-fixes"]
}
}
但要注意:--unsafe-fixes可能改错东西,尤其在动态代码或字符串拼接场景下。建议只在CI或预提交钩子里启用,编辑器里手动触发单点Quick Fix更可控。
pyproject.toml里的规则为什么不生效
ruff-lsp会读取项目根目录下的pyproject.toml,但只认[tool.ruff]段。如果写成[ruff]或[tool.ruff.lint](旧版格式),它就当没看见。
常见失效点:
- 文件不在项目根下打开——Sublime按当前视图路径找
pyproject.toml,不是按文件所在目录 -
select规则没包含你想检查的代码类型,比如只写了select = ["E"],那F401(未使用导入)就不会报 - 用了
ignore但拼写错误,比如ignore = ["F401"]写成ignored = ["F401"],配置就废了
最稳的验证方式:在终端里cd进文件所在目录,运行ruff check --preview .,输出和编辑器里看到的应该一致。不一致,说明LSP没读到正确配置。
真正卡住人的地方,往往不是ruff-lsp本身,而是Sublime对scope的判定、PATH的隔离、或者pyproject.toml的加载路径——这些细节不显眼,但一错就全盘失效。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











