You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:54:04