使 nvim-cmp 不自动选择第一个选项

问题描述 投票:0回答:3

我使用

nvim-cmp
作为我的完成引擎,它工作正常,但想更改默认行为以禁用第一个选项的自动选择。原因是,当一行的最后一个单词有建议时,按 Enter 键将应用第一个建议,而不仅仅是插入换行符。

例如,在 haskell 中,输入

main = do<CR>

do
与 luasnip 中的
diso~
匹配,并被替换为类似

main = 2022-12-05T12:50:34

我希望建议可见,但在按下选项卡之前不会选择任何建议,如果没有选择任何建议,则

<CR>
只是换行符。这可能吗?

neovim
3个回答
11
投票

回答我自己的问题,我发现使用

lsp-zero
时,必须在那里进行配置。
advanced-usage.md
中的文档提供了确切的解决方案,我将其发布在这里:

local lsp = require('lsp-zero')
lsp.preset('system-lsp')  -- or recommended, or whatever...
lsp.setup_nvim_cmp({
    preselect = 'none',
    completion = {
        completeopt = 'menu,menuone,noinsert,noselect'
    },
})
lsp.setup()

4
投票

首先设置

completeopt=menu,preview,menuone,noselect
来配置自动完成菜单。

然后你必须修改你的

cmp
插件配置来映射CR键:

local cmp = require'cmp'

cmp.setup({
  mapping = cmp.mapping.preset.insert({
    ['<CR>'] = cmp.mapping.confirm({ select = false }),
  })
})

有关 cmp.confirm 选项的进一步说明,请参阅

cmp 插件文档


0
投票

如果您想阻止 tab 选择命令行中的第一个自动完成建议(按

:
后),那么这就是方法。您需要完全禁用 tabshift+tab 键的功能:

cmp.setup.cmdline(':', {
  mapping = cmp.mapping.preset.cmdline({
   ['<Tab>'] = function() end,
   ['<S-Tab>'] = function() end,
  }),
  sources = cmp.config.sources({
    { name = 'path' }
  }, {
    { name = 'cmdline' }
  })
})

您可以通过查看

cmp.mapping.preset.cmdline()
目录中的文件
lua/cmp/config/mapping.lua
找到
nvim-cmp
返回的默认映射。

© www.soinside.com 2019 - 2024. All rights reserved.