首页 > 解决方案 > 带有扩展字符的缓冲区字竞争配置(neovim)

问题描述

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

举个例子,如果我mɔgɔ在我输入的时候已经在文件中,g那么代码片段完成就会启动,但是没有缓冲区完成选项。但实际上,即使是 ultisnip snippit 选项也应该只出现在单词边界上:

snippet gui "GUI Element Name" !w  

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

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

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

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

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

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

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

我也对这个 Q/A 有点困惑:Vim 语法文件:向 iskeyword 添加某些字符不起作用

一方面,您似乎无法将任何高于 255 的内容添加到 iskeywords。另一方面,Neovim 似乎正在使用 ctrl-p 处理这些字符。

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

标签: regexunicodeluaneovim

解决方案


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

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

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

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


推荐阅读