具有扩展字符的缓冲区字竞争配置(neovim)

Buffer word competion configuration with extended characters (neovim)

我正在尝试使用 nvim-cmp and the cmp-buffer 源来完成缓冲区单词。我有来自非洲语言的单词,带有 ɔ ɛ ɲ 等。仅供参考,默认的 ctrl-p 可以正常工作。当我为 asciidoc 安装片段时,我遇到的问题似乎在 nvim_cmp 中很明显。 (我同时使用了这两个片段并希望缓冲区完成)

例如,如果我在键入 g 时文件中有 mɔgɔ,则片段完成会启动,但没有缓冲区完成选项。但实际上,即使是 ultisnip snippit 选项也应该只出现在单词边界上:

snippet gui "GUI Element Name" !w  

所以我认为这是 ɔ ɛ(和其他字母未被识别为单词的一部分)的情况。cmp-buffer 文档提供了以下信息:

keyword_pattern (type: string)
Default: [[\%(-\?\d\+\%(\.\d\+\)\?\|\h\w*\%([\-.]\w*\)*\)]]

用于从缓冲区内容创建单词列表的正则表达式。

如果您想使用 iskeyword 选项来识别单词,您可以将此设置为 \k\+

我在我的配置中试过了,但没有用,我不确定这是不是正确的语法:

  sources = {                                                                                                                                    
    { name = 'nvim_lsp' },    
    { name = 'ultisnips' },    
    { name = 'buffer', keyword_pattern = [[\k\+]] }    
  }    

我也不确定如何将这些(以及更多带有重音符号的)字符放入正则表达式(以及 Lua 语法)中。如果有一个例子说明如何向这个表达式添加字符,那将会很有帮助。

我对此也有点困惑Q/A:Vim syntax file: Adding certain characters to iskeyword isn't working

一方面,您似乎不能向 iskeywords 添加超过 255 的任何内容。另一方面,Neovim 似乎无论如何都在使用 ctrl-p 处理这些字符。

因此,如果我可以使用 iskeyword 解决方案或正则表达式来解决这个问题,我将不胜感激。

我认为语法不正确,在 docs 中您可以看到有一个自定义源的部分。

使用它,我自定义了缓冲区源,如下所示:

  sources = {
    { name = 'nvim_lsp' },
    {
      name = 'buffer',
      opts = {
        get_bufnrs = function()
          return vim.api.nvim_list_bufs()
        end
      },
    },
    { name = 'path' },
  },

因此,如果您将 keyword_pattern 选项放在 opts 字段中,它应该会按预期工作,前提是模式是正确的。