我正在为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]
第二行将是所有相同的颜色,而第一行是赢得的。它们都应该像第二个一样。
答案 0 :(得分:1)
正如您在评论中指出的那样,通常原因是另一个语法组的干扰(在您的情况下,通过不同的插件,Rainbow Parenthesis)。如果这是相同语法的一部分,您通常可以通过更改嵌套层次结构来修复问题,但使用外部插件时,您可能会运气不好。
问题是Vim只提供两种突出显示机制,:syntax
(绑定到缓冲区)和:match
/ matchadd()
,它绑定到窗口。因此,如果您想要缓冲区的自定义突出显示,则必须使用:syntax
并冒险干扰文件类型的语法,或使用matchadd()
并且必须使用复杂的autocmds才能将它们仅应用于当前缓冲区