【问题标题】:make nvim-cmp not autoselect the 1st option使 nvim-cmp 不自动选择第一个选项
【发布时间】:2022-12-08 21:44:00
【问题描述】:

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

例如,在 haskell 中,输入

main = do<CR>

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

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

我希望这些建议是可见的,但在按下 tab 键之前​​没有一个被选中,如果没有被选中,那么 &lt;CR&gt; 只是一个换行符。这可能吗?

【问题讨论】:

  • 运行命令set completeopt?,输出结果是什么?尝试使用set completeopt=menu,menuone,noselect 看看它是否按预期工作。
  • @jdhao 是completeopt=menu,preview,menuone,noselect 但改变它似乎没有效果。

标签: neovim


【解决方案1】:

首先设置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 plugins documentation

【讨论】:

  • 谢谢,但这对我的配置没有影响。我发现 lsp-zero 是罪魁祸首。来自 lsp-zero 的文件 advanced-usage.md 中有一个配置示例,它完全按预期工作。
【解决方案2】:

回答我自己的问题,我发现使用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()

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多