繁体   English   中英

使用 nvim-cmp 和 lsp 的最小 NeoVim lua 配置

[英]Minimal NeoVim lua config for using nvim-cmp with lsp

我正在尝试编写自己的基于 NeoVim Lua 的配置,精简到我需要的最低限度,目标是至少了解大部分配置。 LSP 设置工作正常,是我为 nvim-cmp 配置的唯一源:

local cmp = require("cmp")                                                                                                                                                              
 
cmp.setup {                                                                                                                                                                             
  sources = {                                                                                                                                                                           
    { name = 'nvim_lsp' }                                                                                                                                                               
   }                                                                                                                                                                                     
}                                                                                                                                                                                       
local capabilities = vim.lsp.protocol.make_client_capabilities()                                                                                                                        
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) 

根据来自 LSP 的信息,在一些启动延迟之后,完成工作在我看到带有建议完成的弹出窗口的意义上。

但我不能选择任何建议的完成。 我可以继续输入以减少建议的完成,但我不能使用制表符、箭头键...从弹出窗口中选择一个条目。 我在文档中看到可以定义键盘映射但无法理解它们。 它们都相当复杂,需要安装一个片段包,......

我更愿意通过选项卡选择下一个完成并通过箭头键导航它们。 “Enter”应该选择当前的一个。

有人可以向我展示此设置的最小配置或指向更多“基本”文档吗?

Nvim-cmp 要求您明确设置制表符和其他键的映射,这是我的工作示例

local cmp = require'cmp'
local lspkind = require'lspkind'

cmp.setup({
  snippet = {
    expand = function(args)
      -- For `ultisnips` user.
      vim.fn["UltiSnips#Anon"](args.body)
    end,
  },
  mapping = cmp.mapping.preset.insert({
          ['<Tab>'] = function(fallback)
            if cmp.visible() then
              cmp.select_next_item()
            else
              fallback()
            end
          end,
          ['<S-Tab>'] = function(fallback)
            if cmp.visible() then
              cmp.select_prev_item()
            else
              fallback()
            end
          end,
          ['<CR>'] = cmp.mapping.confirm({ select = true }),
          ['<C-e>'] = cmp.mapping.abort(),
          ['<Esc>'] = cmp.mapping.close(),
          ['<C-d>'] = cmp.mapping.scroll_docs(-4),
          ['<C-f>'] = cmp.mapping.scroll_docs(4),
        }),
  sources = {
    { name = 'nvim_lsp' }, -- For nvim-lsp
    { name = 'ultisnips' }, -- For ultisnips user.
    { name = 'nvim_lua' }, -- for nvim lua function
    { name = 'path' }, -- for path completion
    { name = 'buffer', keyword_length = 4 }, -- for buffer word completion
    { name = 'omni' },
    { name = 'emoji', insert = true, } -- emoji completion
  },
  completion = {
    keyword_length = 1,
    completeopt = "menu,noselect"
  },
  view = {
    entries = 'custom',
  },
  formatting = {
    format = lspkind.cmp_format({
      mode = "symbol_text",
      menu = ({
        nvim_lsp = "[LSP]",
        ultisnips = "[US]",
        nvim_lua = "[Lua]",
        path = "[Path]",
        buffer = "[Buffer]",
        emoji = "[Emoji]",
          omni = "[Omni]",
      }),
    }),
  },
})

这对我很有用。 映射部分对应于表中键mapping的配置。 您可以根据我的配置调整您的 conf 以使其适合您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM