在VIM中,有没有办法为模板尖括号定义syn区域而不会与小于符号冲突?

pep*_*ico 5 vim vim-syntax-highlighting

至于{,}[,](,)我真的希望能够定义syntax region<,>将用于C++模板使用类似如下:

a<b>

但是,有没有办法创建这样的语法区域,而不会与以下内容发生冲突:

if( a < b<c>::d )

第一个<显然是"小于"运算符,应该作为模板参数的区域的开头被丢弃.

我试图使用几个选项,但无法使其工作.尝试使用复杂的正则表达式识别模板args区域而不是一个小于操作似乎真的不可能,它只能通过使用嵌套的自引用模式检查平衡对来工作.

Ing*_*kat 1

只要您追求80% 的解决方案并将 中的文本限制<...>为非空白标识符(假设您的编码风格用空白包围比较运算符),通过使用:syntax match代替:syntax region(它已经在开始匹配时触发,而不检查存在结束匹配),应该可以工作(因为单个正则表达式必须匹配开始和结束)。

关于解析 C++(在真正的编译器中)的困难已经说了很多,所以不要指望使用正则表达式的通用解析解决方案是完美的。(另外,不要忘记语法突出显示只是一种视觉辅助,您不应该过度依赖它)。