976 字
5 分钟
Neovim配置-自动补全引擎

在上篇文章中,我们已经通过 mason 配置好了 language-server ,但我们还没有配置好补全前端,因此无法使用 lsp 提供的补全功能。这一章,我们将使用为Neovim安装一个补全引擎,为其提供代码补全功能。Neovim的补全引擎有很多,比如: nvim-cmpcoq 以及最新的使用了 rustblink ,这里我们选择的是 blink 作为前端。作为一个 rust 项目,blink 的最大卖点就是“快”,虽然我并没有觉得特别快,但它的配置要明显比其他引擎更简洁方便,这是我选择它的最大原因。

blink 的安装#

blink 的安装过程很简单:

return{
'saghen/blink.cmp',
dependencies = { 'rafamadriz/friendly-snippets' },
version = '*',
---@module 'blink.cmp'
---@type blink.cmp.Config
}

blink 的个性化配置#

接下来就要给 blink 做一些个性化配置,下面是我的配置参考,选项内容可以通过 :help blink-cmp-config 唤出帮助查看:

opts = {
keymap = {
preset = 'enter',
['<Tab>'] = { 'select_next', 'fallback' },
['<S-Tab>'] = { 'select_prev', 'fallback' },
},
completion = {
documentation = {
auto_show = true,
window = { border = 'rounded' },
},
keyword = { range = 'full' },
menu = {
auto_show = true,
draw = {
columns = {
{ "kind_icon" },
{ "label", "label_description", gap = 1 },
{ "kind" }
},
},
border = 'rounded',
},
list = {
selection = {preselect = false, auto_insert = true}
}
},
appearance = {
nerd_font_variant = 'normal'
},
sources = {
default = { 'lsp', 'path', 'snippets', 'buffer' },
},
fuzzy = { implementation = "prefer_rust_with_warning" }
},
opts_extend = { "sources.default" },
}
  • keymap 给出了四种预设:default, super-tab, enter, none ,使用 C-y, tab, enter 键来接受补全,none 表示无任何预设键。你还可以在预设的基础上进行改建,我就在 enter 的基础上将移动补全选项替换为了 tabS-tab 以符合我的习惯。
  • completion 用于配置与补全相关的内容。
    • documentation 决定补全内容的旁边如何弹出说明,我们不仅能定义其弹出方式还能定义其弹出窗口的样式。
    • keyword 表示如何匹配补全内容,可以选择 fullprefix 。比如 foo_|_barfull 选项会将 foo__bar 全部列为匹配关键字,而 prefix 选项只会将 foo_ 列为关键字。
    • menu 是对补全菜单进行定制的选项,相比 documentationmenu 多了一个 draw 设置,其决定补全彩蛋的显示内容。上述设置令补全菜单依次显示:补全来源图标、补全内容、补全内容描述、补全来源。
    • list 中的 selection 是决定补全菜单行为的选项。
      • preselect 决定是否在显示补全时自动选择第一项。
      • auto_insert 决定在选择补全选项时是否将其自动插入到文中。
  • appearance 决定了文字的显示与对其方式,一般 noraml 就可以。
  • source 决定了补全内容的来源,常用来源有:lsp 、路径、代码片段和上下文。对应的选项是{ 'lsp', 'path', 'snippets', 'buffer' }

lsp 自不必说,我们很大一部分补全来源都是它,路径能够让你免去打开文件树复制目录的辛苦,代码片段则非常有意思,它可以节省写像 html5 那种一大堆固定格式标签的时间,最后就是根据上下文进行补全,这是Neovim自带的功能。

结语#

在完成这项设置之后,Neovim就已经拥有可以和VSCode一比的代码编辑体验了,虽然由于VSCode拥有像是 pylancer 这样好用的闭源引擎,但Neovim配合 pylsp 这样开源引擎的体验可以说也是大差不差了。不过可能你依然会发现依靠 lsp 提供的代码高亮似乎并不是那么好用,与VSCode相比,很多内容是不会以高亮来提示的。因此,下一章我们要学习使用 treesitter 来通过代码分析提供更高级的代码高亮。

Neovim配置-自动补全引擎
https://blog.lancersoul.top/posts/nvim-blink/
作者
Lancer Soul
发布于
2025-09-17
许可协议
CC BY-NC-SA 4.0