首页 > 其他分享 >从零开始配置vim(24)——自动补全

从零开始配置vim(24)——自动补全

时间:2022-09-08 09:33:37浏览次数:78  
标签:24 use 补全 name -- mapping vim cmp

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来源于当前 buffercmd-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#anymous"](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相关的配置。帮助大家巩固一下这方面的内容。

标签:24,use,补全,name,--,mapping,vim,cmp
From: https://www.cnblogs.com/lanuage/p/16668335.html

相关文章

  • 24-修改密码功能
    24-修改密码功能概述本文接着写smbms的修改密码的功能功能不算难,核心就是数据库的update语句实践UserDao.javapackagecom.kuang.dao.user;importcom.kuang.pojo.......
  • NeoVim插件之CPP助手
    简介插件地址:cppassist.nvim该插件是我自己根据ourobors.nvim插件所写的一款类似于VAssistX的助手插件。细节使用正则表达式而不是LSP来查找源文件;可以识别......
  • [异常解决] Ctrl+c/Ctrl+v/Ctrl+p not working on vim
    博主用archlinux,在上面装了vim,但是发现ctrl+c好像没用看了:https://superuser.com/questions/1704633/ctrlc-ctrlv-ctrlp-not-working-on-vim他说我装的vim不......
  • 课程学习24-类、字段、方法
    类是组成java程序的基本要素,是一类对象的原型。封装了一类对象的状态和方法,即把变量与函数封装到一个类中。 一、构造方法constuctor特殊的方法、初始化new该类的......
  • 第 24 题:聊聊 Redux 和 Vuex 的设计思想
    共同点首先两者都是处理全局状态的工具库,大致实现思想都是:全局state保存状态---->dispatch(action)------>reducer(vuex里的mutation)---->生成newState;整个状态为同步......
  • NC50243 小木棍
    题目原题地址:小木棍题目编号:NC50243题目类型:搜索剪枝、BFS时间限制:C/C++1秒,其他语言2秒空间限制:C/C++32768K,其他语言65536K1.题目大意n根木棍,由k根长度为l且相......
  • 从零开始配置vim(23)——lsp基础配置
    上一章,我们初步认识了lsp,并且对nvim-treesitter插件进行了配置,为编辑器提供了代码着色、自动格式化以及增量选中功能。算是初步体验了lsp的相关功能。从这篇开始我们通过......
  • neovim环境搭建
    neovim环境搭建安装新版本neovimsudoaptinstallsoftware-properties-commonsudoaptupdatesudoadd-apt-repositoryppa:neovim-ppa/stablesudoaptinstallneo......
  • 支持pycahrm代码自动补全的库才是好库,不能代码补全的库很垃圾。fastapi暴击flask
     看看fastapi的源码,application.py和routing.py两个文件里面的postdeletegetput等方法,全部入参几乎99%一摸一样,高度重复了近上千行代码,但是我支持。 但是因为......
  • 代码笔记24 windows+opencv4.5.5安装中出现的IPPICV: Download: ippicv_2020_win_inte
    1环境介绍:windows10,visualstudio2019,CMake,OPENCV4.5.5出现问题IPPICV:Download:ippicv_2020_win_intel64_20191018_general.zipTry1failedCMakeWarninga......