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

Neovim下nvim-cmp的cmp-buffer源支持扩展字符的补全配置问题

解决方案1:基于iskeyword配置(推荐,和原生ctrl-p补全行为一致)

Neovim不存在旧版Vim中iskeyword无法添加编码大于255字符的限制,原生ctrl-p补全就是基于iskeyword识别单词,你可以按以下步骤配置:

  1. 先将你需要识别的特殊字符添加到iskeyword中,可选择全局生效或者仅针对asciidoc文件生效:
-- 仅针对asciidoc文件添加特殊字符到iskeyword
vim.api.nvim_create_autocmd('FileType', {
  pattern = 'asciidoc',
  callback = function()
    -- 按需在列表中添加你需要支持的字符,包括带重音的Unicode字符
    vim.opt_local.iskeyword:append({ 'ɔ', 'ɛ', 'ɲ', 'á', 'é', 'í', 'ó', 'ú' })
  end
})
  1. 修正nvim-cmp的配置,除了设置keyword_pattern = [[\k\+]],可以适当调高buffer源的优先级,确保补全项不会被snippet完全覆盖:
sources = {
  { name = "nvim_lsp", priority = 1000 },
  { name = "ultisnips", priority = 750 },
  -- 缓冲区源优先级调整到低于snippet,不会影响snippet触发,同时会出现在补全列表中
  { name = "buffer", priority = 500, keyword_pattern = [[\k\+]] }
}

解决方案2:直接修改keyword_pattern正则(无需改动iskeyword)

如果不想修改iskeyword配置,可以直接将需要支持的特殊字符写入cmp-buffer的提取正则:

sources = {
  { name = "nvim_lsp" },
  { name = "ultisnips" },
  {
    name = "buffer",
    -- 正则中直接加入你需要识别的特殊字符,也可以用\p{L}匹配所有Unicode字母类字符
    keyword_pattern = [[\%(-\?\d\+\%(\.\d\+\)\?\|\p{L}*\%([\-.]\p{L}*\)*)]],
    priority = 500
  }
}

排查验证步骤

  1. 打开asciidoc文件后执行:set iskeyword?,确认你添加的特殊字符已经在输出列表中
  2. 执行:CmpStatus确认buffer源处于激活状态
  3. 若补全列表仍无缓冲区项,可临时注释ultisnips源测试,排除优先级过低导致的过滤问题

关于你提到的iskeyword限制疑问:相关描述仅适用于旧版Vim,Neovim已完整支持Unicode字符添加到iskeyword,这也是原生ctrl-p补全能正常识别特殊字符的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:45:03