Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Vim正则表达式无法匹配行开头的方括号_Regex_Vim_Syntax Highlighting_Hlsl - Fatal编程技术网

Regex Vim正则表达式无法匹配行开头的方括号

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

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

[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我不认为这里有语法问题,我相信开头的
/
字符是“命令”的一部分它应该从正则表达式本身中删除。只是一个想法。