使用neovim/nvim-lspconfig配置Neovim自动补全功能失败求助
问题原因排查与修复方案
现有配置(基于completion-nvim)的修复方法
你当前使用的补全依赖nvim-lua/completion-nvim不属于neovim/nvim-lspconfig的内置组件,需单独安装,且存在以下配置缺失:
- 需手动开启自动补全弹窗触发开关,在你的Vimscript配置中添加以下行:
let g:completion_enable_auto_popup = 1
- 补全项选择映射缺失,添加以下按键绑定实现Tab选择补全、回车确认补全:
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>" inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>" inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
- 确认无其他补全插件(如YouCompleteMe、coc.nvim等)与当前配置冲突,避免补全触发逻辑被覆盖。
配置修改完成后重启Neovim,可输入:LspInfo命令确认对应语言的LSP服务已正常附着在当前缓冲区。
主流稳定补全方案替换(推荐)
completion-nvim已停止维护,目前Neovim官方生态推荐使用hrsh7th/nvim-cmp作为补全框架,配置步骤如下:
- 安装核心依赖插件:
hrsh7th/nvim-cmp、hrsh7th/cmp-nvim-lsp、hrsh7th/cmp-buffer、hrsh7th/cmp-path - 替换你原有配置中从
require('completion').on_attach()开始的LSP相关配置,替换为以下内容:
local cmp = require('cmp') local cmp_nvim_lsp = require('cmp_nvim_lsp') -- 补全基础配置 cmp.setup({ mapping = cmp.mapping.preset.insert({ ['<C-b>'] = cmp.mapping.scroll_docs(-4), ['<C-f>'] = cmp.mapping.scroll_docs(4), ['<C-Space>'] = cmp.mapping.complete(), ['<C-e>'] = cmp.mapping.abort(), ['<CR>'] = cmp.mapping.confirm({ select = true }), ['<Tab>'] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() else fallback() end end, { 'i', 's' }), ['<S-Tab>'] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() else fallback() end end, { 'i', 's' }), }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'path' } }, { { name = 'buffer' } }) }) -- 绑定LSP补全能力 local capabilities = cmp_nvim_lsp.default_capabilities() local nvim_lsp = require('lspconfig') local servers = {'clangd', 'pyright', 'gopls'} for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { capabilities = capabilities } end
内容的提问来源于stack exchange,提问作者coder937
相关产品推荐
相关产品推荐

