Regex Vim正则表达式无法匹配行开头的方括号
我正在为Direct3D编写语法文件,但属性有问题:Regex Vim正则表达式无法匹配行开头的方括号,regex,vim,syntax-highlighting,hlsl,Regex,Vim,Syntax Highlighting,Hlsl,我正在为Direct3D编写语法文件,但属性有问题: [unroll] for(int i = 0...) 在这里,“展开”是一个属性。我使用正则表达式在方括号内查找一些关键字,以将它们标识为属性。我使用的正则表达式是works,除非开口方括号前没有空格: [unroll] // does not work [unroll] // works 只要至少有一个空格,那么在开始的方括号之前的空格(或制表符)的数量并不重要 这是我使用的正则表达式(简化为仅匹配展开): syn match hls
[unroll]
for(int i = 0...)
在这里,“展开”是一个属性。我使用正则表达式在方括号内查找一些关键字,以将它们标识为属性。我使用的正则表达式是works,除非开口方括号前没有空格:
[unroll] // does not work
[unroll] // works
只要至少有一个空格,那么在开始的方括号之前的空格(或制表符)的数量并不重要
这是我使用的正则表达式(简化为仅匹配展开):
syn match hlslAttribute /^\s*\[unroll\]/
如果使用,则会出现相同的问题:
syn match hlslAttribute /.*\[unroll\]/
编辑:
如注释中所述:它在搜索文件时起作用,但在匹配语法高亮显示模式时不起作用 当前语法突出显示文件可在以下位置找到: 要启用.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]
第二行颜色相同,而第一行颜色不同。它们都应该像第二个一样。正如您在评论中所指出的,原因通常是另一个语法组的干扰(在您的例子中,是另一个插件,彩虹括号)。如果这是同一语法的一部分,您通常可以通过更改嵌套层次结构来修复问题,但是使用外部插件,您可能会运气不佳
问题是Vim只提供两种高亮显示机制,
:syntax
(绑定到缓冲区)和:match
/matchadd()
,绑定到窗口。因此,如果要为缓冲区设置自定义高亮显示,则必须使用:语法并冒干扰文件类型语法的风险,或者使用matchadd()
并必须使用复杂的autocmd使其仅应用于当前缓冲区。/\s*\[unroll]
可使用或不使用空格,这里。我在搜索文件时也可以使用它,但在匹配语法突出显示模式时不起作用:我不知道为什么。如果您在这样一个属性之前和换行之后转储文件,是否还有其他字符?两个正则表达式都应该工作,这很奇怪。@fge否,因为它的语法并不奇怪@John使用语法突出显示这个正则表达式不起作用的原因有很多。非常大。您应该提供足够的信息,以便在另一台机器上使用vim-u NONE
复制此信息。作为其中的一部分,您肯定需要发布语法脚本。将来,“它在为我搜索文件时也有效,但在匹配语法突出显示模式时无效”应该是问题中的内容,而不是注释中的内容。@ZyX我不认为这里有语法问题,我相信开头的/
字符是“命令”的一部分它应该从正则表达式本身中删除。只是一个想法。