You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neovim中如何仅向Ruff LSP执行命令无需启停其他服务

无需断开其他LSP,在Neovim中用Ruff自动修复Python代码

直接针对Ruff LSP发送修复命令即可,不用重启或断开Pyright等其他服务器,以下是两种实用实现方式:

方式一:自定义全局命令

创建一个自定义Neovim命令,仅向Ruff LSP发送自动修复请求:

vim.api.nvim_create_user_command('RuffFixAll', function()
  local current_buf = vim.api.nvim_get_current_buf()
  local clients = vim.lsp.get_active_clients({ bufnr = current_buf })
  
  for _, client in ipairs(clients) do
    if client.name == 'ruff_lsp' then
      vim.lsp.buf.execute_command({
        command = 'ruff.applyAutofix',
        arguments = { { uri = vim.uri_from_bufnr(current_buf) } },
      })
      return
    end
  end
  
  vim.notify('当前缓冲区未激活Ruff LSP服务', vim.log.levels.WARN)
end, { desc = '使用Ruff自动修复当前缓冲区所有可修复的Python代码问题' })

使用时直接在命令行输入:RuffFixAll即可执行修复。

方式二:绑定缓冲区局部快捷键

在LspAttach回调中,仅当Ruff LSP附加到缓冲区时绑定快捷键,避免无效触发:

vim.api.nvim_create_autocmd('LspAttach', {
  callback = function(args)
    local client = vim.lsp.get_client_by_id(args.data.client_id)
    if not client or client.name ~= 'ruff_lsp' then
      return
    end
    
    -- 绑定<leader>rf作为修复快捷键,可根据自己习惯修改
    vim.keymap.set('n', '<leader>rf', function()
      vim.lsp.buf.execute_command({
        command = 'ruff.applyAutofix',
        arguments = { { uri = vim.uri_from_bufnr(args.buf) } },
      })
    end, { 
      buffer = args.buf,
      desc = 'Ruff自动修复当前缓冲区代码'
    })
  end,
})

之后在Python文件中按下<leader>rf,就会直接调用Ruff的自动修复功能,不会影响Pyright等其他LSP。

核心原理

通过vim.lsp.get_active_clients筛选出当前缓冲区的Ruff LSP客户端,仅向它发送ruff.applyAutofix命令,避免向Pyright等不支持该命令的LSP广播请求,从根源上解决报错问题。

内容的提问来源于stack exchange,提问作者André Anjos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:29:56