无需按Esc,如何关闭nvim中nvim-cmp的内容补全菜单并换行?
解决nvim-cmp中按ENTER直接换行而不选中补全项的问题
方法一:仅选中补全项时触发补全
在你的nvim-cmp配置中,调整<CR>的映射,将select参数设为false:
cmp.setup({ -- 保留其他已有配置项 mapping = { -- 保留<C-n>、<C-p>等导航映射 ['<CR>'] = cmp.mapping.confirm({ select = false, -- 仅手动选中补全项时,按ENTER才插入补全内容 }), }, })
设置后,补全菜单弹出但未选中任何项时,按ENTER会直接执行默认换行,保留你输入的内容;只有选中补全项后按ENTER才会插入补全内容。
方法二:强制关闭菜单后换行
若你希望无论是否选中补全项,按ENTER都直接换行,可以自定义<CR>的行为:
cmp.setup({ mapping = { ['<CR>'] = cmp.mapping(function(fallback) if cmp.visible() then cmp.abort() -- 关闭补全菜单 end fallback() -- 执行默认换行操作 end, { 'i', 's' }), }, })
此配置下,按ENTER会先关闭弹出的补全菜单(如果存在),再执行换行,完全不会触发补全插入。
注意事项
- 若使用lsp-zero等封装框架,需确保自定义映射覆盖框架默认配置。
- 修改后重启Neovim或执行
:source %加载配置生效。
内容的提问来源于stack exchange,提问作者Jeff Saremi
相关产品推荐
相关产品推荐

