有3个关键要素:

  • LSP 管理器: nvim-lspconfig
  • cmp 代码补全引擎插件: nvim-cmp
  • language server 管理器: mason.nvim

LSP是什么

Language Server Protocol,实际意义为客户端与服务端通信协议。感谢微软的创造。

而language server是专门为单独语言启动的解析、处理服务,具体能够实现例如:

  • 跳转定义
  • 找到引用
  • 完成提示
  • 重命名
  • 格式化
  • 重构

等等操作,非常贴近于IDE的功能。

Nvim内置了Nvim LSP Client的API接口,但是服务端的实际分析处理能力需要第三方提供。

原本的配置比较复杂繁琐,官方又制作 nvim-lspconfig 来管理各类第三方language server的配置。

CMP是什么

全称是 autocompeletion翻译为自动补全比较合适。

最核心的功能是提供代码片段。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
'hrsh7th/nvim-cmp',
event = "VeryLazy",
config = function()
local cmp = require("cmp")
cmp.setup({
snippet = { expand = function() end },
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "nvim_lua" },
{ name = "buffer" },
{ name = "path" },
}),
})
end,
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-nvim-lua",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
}
}

其中sources则是代码片段的插件。

Mason.nvim怎么用

如果你是用的了 nvim-lspconfig 管理lsp,那么配合mason需要一个中间桥梁 mason-lspconfig

使用 :Mason 就能选择你所需要的 language server 进行安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
"neovim/nvim-lspconfig",
config = function()
local lspconfig = require('lspconfig')
lspconfig.lua_ls.setup {}
lspconfig.tsserver.setup {}
lspconfig.tailwindcss.setup {}
lspconfig.marksman.setup {}
lspconfig.eslint.setup {}
lspconfig.html.setup {}
lspconfig.cssls.setup {}
end,
dependencies = {
"williamboman/mason-lspconfig.nvim",
},
},
{
"williamboman/mason.nvim",
config = true
},
{
"williamboman/mason-lspconfig.nvim",
opts = {
ensure_installed = {
"lua_ls",
"tsserver",
"cssls",
"tailwindcss",
"marksman",
"html",
"eslint"
}
},
dependencies = {
"williamboman/mason.nvim"
}
}