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

Neovim中rust-analyzer无错误提示与补全,pyright异常求助

问题描述
  • 环境:更新后的Arch系统、刚编译安装Neovim 0.9.1的Debian 12系统
  • 核心问题:rust-analyzer无任何提示、自动补全失效。已通过mason、rustup component add、npm install三种方式安装,已加入系统PATH,运行无报错但完全忽略文件内容
  • 尝试过的无效方案:安装rust-tools和coc.nvim,rust-tools无变化,coc.nvim无响应;试过相关社区解决方案但无效
  • 更新补充:pyright同样无法正常工作

当前使用的Neovim配置片段:

vim.cmd [[packadd packer.nvim]]
require("packer").startup(function(use)
  use "wbthompson/packer.nvim"
  use "vim-airline/vim-airline"
  use 'vim-airline/vim-airline-themes'
  use 'ryanoasis/vim-devicons'
  use 'jpalardy/vim-slime'
  use 'shime/vim-livedown'
  use 'ap/vim-css-color'
  use 'terryma/vim-multiple-cursors'
  use 'mattn/emmet-vim'
  use 'scrooloose/nerdtree'
  use 'pacha/vem-tabline'
-- LSP
  use {
    'VonHeikemen/lsp-zero.nvim',
    requires = {
      -- LSP Support
      {'neovim/nvim-lspconfig'},
      {'williamboman/mason.nvim'},
      {'williamboman/mason-lspconfig.nvim'},

      -- Autocompletion
      {'hrsh7th/nvim-cmp'},
      {'hrsh7th/cmp-buffer'},
      {'hrsh7th/cmp-path'},
      {'saadparwaiz1/cmp_luasnip'},
      {'hrsh7th/cmp-nvim-lsp'},
      {'hrsh7th/cmp-nvim-lua'},
      {'hrsh7th/cmp-nvim-lsp-signature-help'},
      {'hrsh7th/cmp-vsnip'},
      {'hrsh7th/vim-vsnip'},

      -- Snippets
      {'L3MON4D3/LuaSnip'},
      {'rafamadriz/friendly-snippets'},
    },
    config = function ()
      require('mason.settings').set({
        log_level = vim.log.levels.DEBUG
      })
    end
  }
end)

require([[lspconfig]]).rust_analyzer.setup({
  on_attach = function (client, buff)
    print([[rust_analyzer is attached]])
  end,
  flags = {
    debounce_text_changes = 150
  },
  cmd = {
    [[rustup]],
    [[run]],
    [[stable]],
    [[rust-analyzer]],
    --    vim.env.HOME .. '/.cargo/bin/rust_analyzer'
  }
})
排查与解决步骤

1. 确认LSP服务状态

  • 打开对应文件后,运行:LspInfo,查看rust-analyzer和pyright是否成功attach到缓冲区,检查服务启动状态
  • 查看LSP日志定位错误:运行:lua vim.cmd('edit ' .. vim.lsp.get_log_path()),搜索rust_analyzer或pyright关键词,排查启动报错信息

2. 解决配置冲突

你同时使用了lsp-zero和手动调用lspconfig.rust_analyzer.setup,会导致配置覆盖冲突。建议统一用lsp-zero的配置逻辑:

  • 删除手动编写的require([[lspconfig]]).rust_analyzer.setup代码块
  • 改用lsp-zero整合mason的配置方式,示例:
local lsp_zero = require('lsp-zero')

-- 绑定LSP基础快捷键
lsp_zero.on_attach(function(client, bufnr)
  lsp_zero.default_keymaps({buffer = bufnr})
end)

-- 初始化mason和mason-lspconfig
require('mason').setup({})
require('mason-lspconfig').setup({
  -- 指定要安装的LSP服务
  ensure_installed = {'rust_analyzer', 'pyright'},
  handlers = {
    -- 通用LSP用默认配置
    lsp_zero.default_setup,
    -- 针对rust-analyzer做自定义配置
    rust_analyzer = function()
      require('lspconfig').rust_analyzer.setup({
        cmd = {'rustup', 'run', 'stable', 'rust-analyzer'},
        settings = {
          ['rust-analyzer'] = {
            checkOnSave = {
              command = 'clippy'
            }
          }
        }
      })
    end,
  }
})

3. 确保补全工具关联LSP来源

检查nvim-cmp是否正确配置了LSP补全来源,添加如下配置到packer代码之后:

local cmp = require('cmp')
local cmp_select = {behavior = cmp.SelectBehavior.Select}

cmp.setup({
  sources = {
    {name = 'nvim_lsp'}, -- 必须启用这个来源才能获取LSP补全
    {name = 'buffer'},
    {name = 'path'},
  },
  mapping = cmp.mapping.preset.insert({
    ['<C-p>'] = cmp.mapping.select_prev_item(cmp_select),
    ['<C-n>'] = cmp.mapping.select_next_item(cmp_select),
    ['<CR>'] = cmp.mapping.confirm({select = true}),
  })
})

-- 让lsp-zero自动配置cmp与LSP的关联
lsp_zero.setup_servers({'rust_analyzer', 'pyright'}, {
  sign_text = true,
  on_attach = function(client, bufnr)
    -- 可添加自定义快捷键
  end
})

4. 验证项目结构合法性

  • Rust项目必须存在Cargo.toml文件,rust-analyzer依赖它识别项目根目录,需打开项目内的.rs文件而非单独的.rs文件
  • Python项目确保存在pyproject.toml、requirements.txt或已激活虚拟环境,pyright需要这些信息识别项目依赖

5. 清理重复安装的LSP服务

三种方式安装rust-analyzer可能导致版本冲突,建议只保留一种安装方式:

  • 移除npm安装版本:npm uninstall -g rust-analyzer
  • 若通过mason安装,运行:MasonUninstall rust-analyzer
  • 保留rustup安装的版本,确保rustup component add rust-analyzer执行成功

内容的提问来源于stack exchange,提问作者bruh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:02:05