You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置nvim-cmp使其不自动选中第一个补全选项?

解决nvim-cmp自动选中第一个补全项的问题

完全可以实现你要的效果,只需调整nvim-cmp的核心配置,分三步修改:

1. 禁用自动选中第一个补全选项

在nvim-cmp的setup配置中,将completion.select设为false,这样补全菜单只会显示建议,不会自动选中任何选项:

cmp.setup({
  completion = {
    select = false, -- 关键:关闭自动选中第一个选项
  },
  -- 其他配置...
})

2. 配置Tab键切换补全选项

映射Tab和Shift+Tab键,用来手动选中补全菜单中的上下选项:

cmp.setup({
  mapping = {
    ['<Tab>'] = cmp.mapping(function(fallback)
      if cmp.visible() then
        cmp.select_next_item() -- 选中下一个补全项
      else
        fallback() -- 未显示补全时,执行默认Tab行为(如缩进)
      end
    end, { 'i', 's' }),
    ['<S-Tab>'] = cmp.mapping(function(fallback)
      if cmp.visible() then
        cmp.select_prev_item() -- 选中上一个补全项
      else
        fallback()
      end
    end, { 'i', 's' }),
  },
  -- 其他配置...
})

3. 配置回车键的行为

让回车键仅在选中补全项时确认补全,否则插入换行:

cmp.setup({
  mapping = {
    ['<CR>'] = cmp.mapping(function(fallback)
      -- 检查是否有活跃的选中项(用户手动选中的)
      if cmp.visible() and cmp.get_active_entry() then
        cmp.confirm({
          behavior = cmp.ConfirmBehavior.Replace,
          select = false -- 确保不会自动选中,必须用户手动选
        })
      else
        fallback() -- 无选中项时,插入换行
      end
    end, { 'i', 's' }),
  },
  -- 其他配置...
})

完整配置示例

把以上配置整合起来,最终的nvim-cmp setup代码如下:

local cmp = require('cmp')

cmp.setup({
  completion = {
    select = false,
  },
  mapping = {
    ['<Tab>'] = cmp.mapping(function(fallback)
      if cmp.visible() then
        cmp.select_next_item()
      else
        fallback()
      end
    end, { 'i', 's' }),
    ['<S-Tab>'] = cmp.mapping(function(fallback)
      if cmp.visible() then
        cmp.select_prev_item()
      else
        fallback()
      end
    end, { 'i', 's' }),
    ['<CR>'] = cmp.mapping(function(fallback)
      if cmp.visible() and cmp.get_active_entry() then
        cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false })
      else
        fallback()
      end
    end, { 'i', 's' }),
  },
  -- 保留你原有的sources、snippet等配置...
  sources = cmp.config.sources({
    { name = 'luasnip' },
    { name = 'nvim_lsp' },
    -- 其他数据源...
  }),
})

配置完成后,重启Neovim即可生效:补全菜单会正常显示建议,但不会自动选中;按Tab可手动选择选项,未选中任何选项时按回车只会插入换行,再也不会触发误替换的问题。

内容的提问来源于stack exchange,提问作者Miguel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:15:28