Chapter 07

编辑器集成:VS Code / JetBrains / Vim

通过 LSP 把 Ruff 变成编辑器里的实时反馈——保存时自动修复、错误下划线、快速修复菜单。

7.1 Ruff 内置 LSP 服务器

从 Ruff 0.4 起,ruff server 成为内置的 Language Server Protocol(LSP) 服务器——不再需要额外的 ruff-lsp Python 包装。

什么是 LSP?

LSP 是微软牵头的标准协议:编辑器(客户端)通过 JSON-RPC 和语言服务器(服务端)通信,获取诊断、补全、跳转、格式化等能力。一个 LSP 服务器能被所有支持 LSP 的编辑器(VS Code、Neovim、JetBrains、Helix、Zed...)复用,而不必为每个 IDE 写插件。

$ ruff server --help
# 手动启动 LSP 服务端(编辑器通常自动启动,不需要手跑)

7.2 VS Code

装官方 Ruff 扩展(Publisher: Astral Software)。配置 .vscode/settings.json

{
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.fixAll.ruff": "explicit",
      "source.organizeImports.ruff": "explicit"
    }
  },
  "ruff.nativeServer": "on",
  "ruff.configuration": "./pyproject.toml",
  "ruff.lineLength": 100
}

保存文件时:

  1. source.fixAll.ruff → 跑 ruff check --fix(safe 修复)
  2. source.organizeImports.ruff → 排 import(I 族)
  3. editor.formatOnSave → 跑 ruff format

7.3 VS Code 常用快捷

Cmd/Ctrl + .(点号)
在 Ruff 划红的行按此,弹出 Quick Fix 菜单——包含"修复该条"、"忽略该规则"、"忽略整族"等操作。
Cmd/Ctrl + Shift + P → "Ruff: ..."
命令面板可运行所有 Ruff 动作:格式整个文件、仅修复、显示输出日志。
Problems 面板
集中查看 Ruff 诊断,按规则或文件过滤。

7.4 JetBrains(PyCharm / IntelliJ)

Ruff 插件(Marketplace 搜 Ruff,来自 koxudaxi)。设置路径:

Preferences / Settings
  → Tools → Ruff
    ☑ Enable Ruff
    ☑ Run Ruff on save
    ☑ Run Ruff when formatting
    Ruff path: /Users/you/.local/bin/ruff  # 或项目 venv 内路径
    Project-level config: pyproject.toml

额外推荐:

7.5 Neovim(LSP 原生)

Neovim 0.8+ 内置 LSP 客户端。用 nvim-lspconfig 一行配置启动:

-- init.lua
require('lspconfig').ruff.setup({
  init_options = {
    settings = {
      lineLength = 100,
    },
  },
})

-- 保存时自动修复 + 格式化
vim.api.nvim_create_autocmd('BufWritePre', {
  pattern = '*.py',
  callback = function()
    vim.lsp.buf.code_action({
      context = { only = { 'source.fixAll.ruff' }, diagnostics = {} },
      apply = true,
    })
    vim.lsp.buf.format({ async = false })
  end,
})
搭配 Pyright / basedpyright

Ruff 只做 lint/format,不做类型检查。Neovim 里建议同时启用 pyright(或更快的 basedpyright)——两个 LSP 可以并存,Ruff 管 lint/format 诊断,Pyright 管类型诊断。

7.6 Zed / Helix / Sublime

因为用 LSP 标准协议,新派编辑器几乎都是"开箱即用":

7.7 PyCharm/VS Code 和 CLI 的版本一致性

最常见的坑:"编辑器说没错,CI 却报错"。原因通常是编辑器插件用的是自带的 Ruff 版本,而 CI 用的是 pyproject 锁住的版本。解决:

# 1. 在 pyproject.toml 锁住 ruff 版本
[tool.uv.dev-dependencies]
ruff = "==0.11.3"

# 2. VS Code settings.json 指向 venv 的 ruff
{
  "ruff.path": ["${workspaceFolder}/.venv/bin/ruff"]
}

确保编辑器、pre-commit、CI 三处用的是同一个 Ruff 二进制。

7.8 小结