安装

{ "neovim/nvim-lspconfig" }, -- LSP 配置基础 
{ "williamboman/mason.nvim" }, -- 轻松管理 LSP 服务器 
{ "williamboman/mason-lspconfig.nvim" }, -- 连接 mason 和 lspconfig

设置

-- Mason & LSP 配置 
require("mason").setup() 
require("mason-lspconfig").setup({ ensure_installed = { "clangd" } 
-- 确保 clangd (C/C++ LSP服务器) 被自动安装 }) 
-- 为 clangd 设置 lspconfig 
require("lspconfig").clangd.setup({})

设置完后还需要进入 nvim,然后 :Mason,这样才能真的去安装clangd

补全显示

安装

{ "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer" }, },

设置

-- Nvim-cmp (自动补全) 配置 
local cmp = require('cmp') 
cmp.setup({ 
	sources = cmp.config.sources({ 
		{ name = 'nvim_lsp' }, 
		{ name = 'buffer' }, 
	}), 
	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 }), 
	}), 
})

sources 补全建议的来源

{ name = 'nvim_lsp' }: 这是代码智能提示最重要的来源。它告诉 cmp 从你当前活动的 语言服务器协议 (LSP) 服务器(比如 C/C++ 的 clangd 或 Python 的 pyright)获取建议。这能提供与上下文相关的函数、变量和关键字的建议。

{ name = 'buffer' }: 这个来源告诉 cmp 扫描你当前正在编辑的文件 (缓冲区),并将在文件中已经出现过的单词作为建议。这对于输入变量名或不想重复输入长单词时非常有用。

mapping 键盘快捷键

可能无法使用快捷键的问题

lazy.nvim 使用的是懒加载,所以配置要在安装的后面。

也就是:

-- 自动补全 UI
  {
    "hrsh7th/nvim-cmp",
    dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer" },
    config = function()
      local cmp = require('cmp')
      cmp.setup({
        sources = cmp.config.sources({
          { name = 'nvim_lsp' },
          { name = 'buffer' },
        }),
        mapping = cmp.mapping.preset.insert({
          ['<Tab>'] = cmp.mapping.select_next_item(), 
          ['<S-Tab>'] = cmp.mapping.select_prev_item(), 
        }),
      })
    end,
  },

否则可能无法使用。