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

标签 vim vim-syntax-highlighting

至于{ , }[ , ]( , ) ,我真的很想能够定义 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/

相关文章:

vim - 切换 NERDTree 并在切换时打开到当前文件的一种映射

macos - 如何在命令终止时调试 vimrc

c++ - vim 不高亮某些 c++ 关键字

vim - 使 vim 在 python 内置函数后面没有点时突出显示它们

Vim 语法高亮

vim - 在vim中重新映射Ctrl-D

c++ - 使用可选输入文件运行 C++ 的 vim 映射

python - 如何以交互方式调试 python vim 脚本?

vim - 突出显示 Python 字符串文字中的 SQL

Vim:切换长行的突出显示