【发布时间】:2012-12-27 16:51:10
【问题描述】:
我正在编写 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 文件启用语法高亮,您必须将 hlsl.vim 文件(pastebin 中的那个)复制到任何 Vim 安装中的语法文件位置(/syntax: /usr/share/vim /vim73/syntax/) 并将这一行添加到您的 .vimrc 中:
autocmd BufNewFile,BufRead *.fx,*.fxc,*.fxh,*.hlsl set ft=hlsl
然后使用之前的扩展名之一创建一个文件并写入:
[unroll]
[unroll]
第二行将是相同的颜色,而第一行不会。他们两个应该和第二个一样。
【问题讨论】:
-
/\s*\[unroll]可在此处使用或不使用空格。 -
它在为我搜索文件时也有效,但在匹配语法突出显示的模式时无效。 :S 我不知道为什么。
-
如果您对文件进行 hexdump,在这样的属性之前和换行符之后,是否还有其他字符?你的两个正则表达式应该工作,这很奇怪。
-
@fge 不,因为它是语法,所以并不奇怪。 @John 当使用语法高亮显示此正则表达式不起作用时,有很多原因。很大。您应该提供足够的信息以使用
vim -u NONE在另一台机器上重现此内容。作为其中的一部分,您肯定需要发布语法脚本。对于未来,“它在为我搜索文件时也有效,但在匹配语法高亮模式时无效”应该是问题中的内容,而不是评论中的内容。 -
@ZyX 我不相信这里有语法问题,我相信开头的
/字符是“命令”的一部分,应该从正则表达式本身中删除。只是一个想法。
标签: regex vim syntax-highlighting hlsl