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
相关产品推荐
相关产品推荐

