Vim正则表达式无法匹配行首的方括号

时间:2012-12-27 16:51:10

标签: regex vim syntax-highlighting hlsl

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

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

在这里,"展开"是一个属性。我使用正则表达式在方括号内找到一些关键字来将它们标识为属性。我正在使用的正则表达式工作,除非在开始方括号之前没有空格:

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

只要至少有一个空格(或制表符)在开头方括号之前的数量并不重要。

这是正则表达式(简化为仅匹配展开)我使用:

syn match hlslAttribute /^\s*\[unroll\]/

如果使用相同的问题:

syn match hlslAttribute /.*\[unroll\]/

编辑: 正如评论中所述:它在搜索文件时有效,但在匹配模式以进行语法高亮时则无效。

可在以下位置找到当前语法突出显示文件:http://pastebin.com/zr1bGLt0

要为.fx或.hlsl文件启用语法hilighting,您必须将hlsl.vim文件(pastebin上的文件)复制到任何Vim安装中语法文件的位置(/ syntax:/ usr / share / vim / vim73 / syntax /)并将此行添加到.vimrc:

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

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

[unroll]
 [unroll]

第二行将是所有相同的颜色,而第一行是赢得的。它们都应该像第二个一样。

1 个答案:

答案 0 :(得分:1)

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

问题是Vim只提供两种突出显示机制,:syntax(绑定到缓冲区)和:match / matchadd(),它绑定到窗口。因此,如果您想要缓冲区的自定义突出显示,则必须使用:syntax并冒险干扰文件类型的语法,或使用matchadd()并且必须使用复杂的autocmds才能将它们仅应用于当前缓冲区