Vim regex在行开始处匹配方括号失败



我正在为Direct3D编写语法文件,我有一个属性问题:

[unroll]
for(int i = 0...)

这里,"unroll"是一个属性。我使用正则表达式找到一些关键字内方括号,以确定它们的属性。我使用的正则表达式有效,除非在开始方括号之前没有空格:

[unroll] // does not work
 [unroll] // works

只要至少有一个空格(或制表符),在开始方括号前有多少个空格(或制表符)并不重要。

这是我使用的正则表达式(简化为只匹配unroll):

syn match hlslAttribute /^s*[unroll]/

使用

同样的问题
syn match hlslAttribute /.*[unroll]/

编辑:如注释中所述:它在搜索文件时工作,但在匹配语法高亮模式时不起作用。

当前的语法高亮显示文件可以在:http://pastebin.com/zr1bGLt0

要启用.fx或.hlsl文件的语法高亮显示,您必须复制hlsl。将vim文件(在pastebin中的那个)移到任何vim安装中语法文件的位置(/syntax:/usr/share/vim/vim73/syntax/),并将这一行添加到.vimrc:

autocmd BufNewFile,BufRead *.fx,*.fxc,*.fxh,*.hlsl set ft=hlsl

然后用前面的扩展名之一创建一个文件并写入:

[unroll]
 [unroll]

第二行都是相同的颜色,而第一行则不是。

正如您在评论中发现的那样,通常原因是另一个语法组的干扰(在您的情况下,由不同的插件Rainbow Parenthesis)。如果这是同一语法的一部分,您通常可以通过更改嵌套层次结构来修复问题,但使用外部插件,您可能会不走运。

问题是Vim只提供了两种突出显示机制,:syntax(绑定到缓冲区)和:match/matchadd()(绑定到窗口)。因此,如果您希望为缓冲区定制高亮显示,则必须使用:syntax并冒着干扰文件类型语法的风险,或者使用matchadd()并必须使用复杂的自动命令使它们仅应用于当前缓冲区。

相关内容

  • 没有找到相关文章

最新更新