976 字
5 分钟
Neovim配置-自动补全引擎
在上篇文章中,我们已经通过 mason 配置好了 language-server ,但我们还没有配置好补全前端,因此无法使用 lsp 提供的补全功能。这一章,我们将使用为Neovim安装一个补全引擎,为其提供代码补全功能。Neovim的补全引擎有很多,比如: nvim-cmp 、 coq 以及最新的使用了 rust 的 blink ,这里我们选择的是 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的基础上将移动补全选项替换为了tab和S-tab以符合我的习惯。completion用于配置与补全相关的内容。documentation决定补全内容的旁边如何弹出说明,我们不仅能定义其弹出方式还能定义其弹出窗口的样式。keyword表示如何匹配补全内容,可以选择full或prefix。比如foo_|_bar,full选项会将foo__bar全部列为匹配关键字,而prefix选项只会将foo_列为关键字。menu是对补全菜单进行定制的选项,相比documentation,menu多了一个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/