从零开始配置vim(24)——自动补全
Posted aluluka
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始配置vim(24)——自动补全相关的知识,希望对你有一定的参考价值。
neovim 自带的代码补全的效果并不好,而且它分为好多类,如果需要人为的去判断使用路径补全、使用当前buffer中的单词补全、亦或者使用include 来进行补全,那样使用起来就很不方便了。针对代码的补全我们可以基于 lsp的配置使用插件来完成,这里我推荐使用 nvim-cmp插件
安装
我们使用下面的代码进行安装
-- nvim-cmp
use 'hrsh7th/cmp-nvim-lsp'
use 'hrsh7th/cmp-buffer'
use 'hrsh7th/cmp-path'
use 'hrsh7th/cmp-cmdline'
use 'hrsh7th/nvim-cmp'
-- vsnip
use 'hrsh7th/cmp-vsnip'
use 'hrsh7th/vim-vsnip'
use 'rafamadriz/friendly-snippets'
-- lspkind
use 'onsails/lspkind-nvim'
看着好像要安装好多插件,但是真正重要的就只有 nvim-cmp
剩下的以 cmp-
开头的都是在指定补全的来源,就像 neovim
自带补全功能可以来源于当前buffer
、路径、引用一样,该插件的补全项也来源于各个地方。例如 cmp-nvim-lsp
来源于语言的 lsp
服务端、cmp-buffer
来源于当前 buffer
、cmd-path
来源于路径
配置
我们还是按照原来的惯例进行配置,新增一个 plugin-config/cmp.lua
的配置文件,并且加载它
require('plugin-config/cmp')
在该配置文件中我们加入如下内容
local cmp = require("cmp")
local lspkind = require("lspkind")
cmp.setup(
-- 设置代码片段引擎,用于根据代码片段补全
snippet =
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
,
window =
,
mapping =
-- 选择上一个
['<C-p>'] = cmp.mapping.select_prev_item(),
-- 选择下一个
['<C-n>'] = cmp.mapping.select_next_item(),
-- 出现补全
['<A-.>'] = cmp.mapping(cmp.mapping.complete(), 'i', 'c'),
-- 取消补全
['<A-,>'] = cmp.mapping(
i = cmp.mapping.abort(),
c = cmp.mapping.close(),
),
-- 确认使用某个补全项
['<CR>'] = cmp.mapping.confirm(
select = true,
behavior = cmp.ConfirmBehavior.Replace
),
-- 向上翻页
['<C-u>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), 'i', 'c'),
-- 向下翻页
['<C-d>'] = cmp.mapping(cmp.mapping.scroll_docs(4), 'i', 'c'),
,
-- 补全来源
sources = cmp.config.sources(
name = 'nvim_lsp',
name = 'vsnip',
name = 'buffer',
name = 'path'
),
--根据文件类型来选择补全来源
cmp.setup.filetype('gitcommit',
sources = cmp.config.sources(
name = 'buffer'
)
),
-- 命令模式下输入 `/` 启用补全
cmp.setup.cmdline('/',
mapping = cmp.mapping.preset.cmdline(),
sources =
name = 'buffer'
),
-- 命令模式下输入 `:` 启用补全
cmp.setup.cmdline(':',
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources(
name = 'path'
,
name = 'cmdline'
)
),
-- 设置补全显示的格式
formatting =
format = lspkind.cmp_format(
with_text = true,
maxwidth = 50,
before = function(entry, vim_item)
vim_item.menu = "[" .. string.upper(entry.source.name) .. "]"
return vim_item
end
),
,
)
配置之后我们就可以使用自动补全相关功能了
本篇的内容到此结束了,后面我们再次以 c/c++以及 python为例来演示如何进行 lsp相关的配置。帮助大家巩固一下这方面的内容。
以上是关于从零开始配置vim(24)——自动补全的主要内容,如果未能解决你的问题,请参考以下文章