Vim regex未创建语法组

2024-07-07 08:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获取python函数要突出显示的参数(粗略地说,我只想突出显示括号中的任何内容)。我有一个工作正则表达式,它突出了正确的东西:

syn match pythonArguments "\vdef.*\(\zs.+\ze\)"
hi def link pythonArguments Special

现在,我在同一个文档中得到了一个类似的东西(函数调用):

syn match pythonFunctionCall "\v\w+\ze\("
hi def link pythonFunctionCall Function

但是,由于某些原因,参数regex不会变成语法组。我尝试将它们作为命令运行,而不是在我的~/.vim/after/syntax/python.vim文档中运行,但没有成功。当我的光标位于搜索/\vdef.*\(\zs.+\ze\)突出显示的表达式上时,没有语法组。我已经尝试了我能想到的一切


Tags: 函数文档参数defmatch语法linkvim
1条回答
网友
1楼 · 发布于 2024-07-07 08:21:44

因此,对于任何感兴趣的人来说,vim(MacOS上的8.1)似乎有错误的语法组。我最终让它工作:

syn match pythonFunctionDeclaration "\v\(.+\):" contains=ALL transparent
syn match pythonArguments "\v\(\zs.+\ze\)" contained contains=ALL

我不知道为什么我尝试的其他方法不起作用,但这将突出显示python函数参数(并且它将不考虑已经存在的语法组)

编辑: 我学到了更多。因此,语法组的正则表达式的问题在于忽略了不同模式之间的重叠。例如:

/\vdef|def something将匹配“def something”的“def”部分,因为vim将跳过“something”部分,因为它已经与第一个模式匹配。我不知道这是否有意义,结帐

回到使突出显示更好的方面,上面语法组的问题是一些if语句和for循环也会匹配。然而,这项工作:

syn clear pythonFunction
syn match pythonFunction "\h\w*" 
nextgroup=pythonFunctionDeclaration display contained
syn match pythonFunctionDeclaration "\v\(.+\):" contains=pythonArguments transparent contained
syn match pythonArguments "\v\(\zs.+\ze\)" contained contains=ALLBUT,pythonFunction
hi def link pythonArguments Special

这将使我们的特殊语法组只发生在函数之后

TLDR;将第二个(较长的)代码块添加到~/.vim/after/syntax/python.vim文件中,使高亮显示的python函数参数与高亮显示的特殊语法组相同

相关问题 更多 >