Vim如何仅在语言定义关键词范围内做正则匹配 高亮C++下划线结尾成员变量
Vim限定C++语法范围匹配下划线结尾成员变量方案
快速实现(无需依赖语法高亮)
你最初使用的/.*_匹配范围过于宽泛,可直接使用以下正则实现需求:
/\<[a-zA-Z0-9_]*_\>(\@!
正则各部分说明:
\<:匹配标识符的起始边界[a-zA-Z0-9_]*:匹配C++标识符允许的所有合法字符_:匹配末尾的单下划线\>:匹配标识符的结束边界(\@!:负向预查,排除后面紧跟左括号的内容(避免匹配到函数名,如示例中的extract_path)
该正则在你提供的代码示例中仅会匹配两处route_graph_,完全符合预期。
严格限定语法组搜索方案
如果你需要严格限定仅在Vim预定义的C++标识符范围内搜索,可使用Vim内置的语法属性匹配能力,正则写法如下:
/\<\w*_\>\%(\%#=synIDattr(synID(line('.'), col('.'), 0), 'name') =~? 'cppIdentifier'\)\@=
使用前需确保已开启C++语法高亮,执行:syntax on即可。
如果需要将该匹配规则持久高亮,可执行命令:
:match Search /\<\w*_\>\%(\%#=synIDattr(synID(line('.'), col('.'), 0), 'name') =~? 'cppIdentifier'\)\@=
其中Search可替换为任意你想使用的高亮组,比如IncSearch、Underlined等。
内容的提问来源于stack exchange,提问作者HiroIshida
相关产品推荐
相关产品推荐

