regex - 带有扩展字符的缓冲区字竞争配置(neovim)
问题描述
我正在尝试使用nvim-cmp和cmp-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 解决方案或正则表达式来解决这个问题,我将非常感激。
解决方案
我认为语法不正确,在文档中您可以看到有一个部分可以自定义源。
使用它,我自定义了缓冲区源,如下所示:
sources = {
{ name = 'nvim_lsp' },
{
name = 'buffer',
opts = {
get_bufnrs = function()
return vim.api.nvim_list_bufs()
end
},
},
{ name = 'path' },
},
因此,如果您将 keyword_pattern 选项放在 opts 字段中,它应该可以按预期工作,因为模式是正确的。
推荐阅读
- zsh - powerline9k zsh 主题将 vcs 移动到左侧面板
- java - 为什么输入 -100000000000000 的输出不正确?
- java - org.openqa.selenium.NoSuchSessionException: invalid session id message=这个版本的ChromeDriver只支持Chrome 74版
- python - 这是比较一个整数的方法吗?我用它来检查它是否是一个字符串列表?
- bash - vscode 集成终端抛出 bash 错误 - echo: command not found
- google-app-engine - 需要帮助从旧版 SDK 迁移 (appcfg)
- java - 如何将大型 JTS 多边形拆分为多个 1 公里乘 1 公里的几何图形?
- c# - 通过 C# 将 Excel 导入 Hadoop
- python - 你如何在 Python 中组合多个字典的列表?
- python - 如何使用 Python 获取 MongoDB 中特定键的值