gpt4 book ai didi

vim - 在 VIM 中,有什么方法可以为模板尖括号定义 syn 区域而不与小于号发生冲突?

转载 作者:行者123 更新时间:2023-12-04 19:12:24 25 4
gpt4 key购买 nike

至于{ , }[ , ]( , ) ,我真的很想能够定义 syntax region< , >用于 C++ 模板用法,如下所示:
a<b>
但是,有什么方法可以创建这样的语法区域,而不会与以下内容发生冲突:
if( a < b<c>::d )
第一个<显然是一个“小于”运算符,并且应该作为模板参数区域的开始而被丢弃。

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

最佳答案

基于@ingo-karkat 的回答,我进一步考虑了空格的使用,并且我认为我得到了一个足够好的匹配模式来满意(我认为这捕获了 90% 以上的情况)。

syn region AngleBrackets matchgroup=AngleBracketContents 
start='[[:space:]<]\@<!<<\@!'
end='>'
start匹配 <前面没有空格也没有 < .检查是否存在 之前 by 空格是一个关键因素,因为大多数时候关系操作都会被空格包围,而且非常常见的做法是不要在模板左括号之前使用空格。
我还检查它是否没有立即被另一个 < 跟随.
这是 what I'm doing 的快照(区域内的操作符获得区域的颜色,嵌套区域改变颜色,它建立在彩虹括号的基础上,并进行了一些小幅修正):
VIM snapshot
更新
刚刚将我的 VIM 正则表达式更改为:
\v%(<operator\_s*)@<!%(%(\_i|template\_s*)@<=\<[<=]@!|\<@<!\<[[:space:]<=]@!)
最后一个实际上将帮助我实现良好的代码风格。

关于vim - 在 VIM 中,有什么方法可以为模板尖括号定义 syn 区域而不与小于号发生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13627544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com