在 vim 中是否可以搜索不包括注释/块注释中出现的术语?

在 vim 中是否可以搜索不包括注释/块注释中出现的术语?

例如,如果我想搜索\<data\>但想跳过出现在多行块注释中的任何条目,如下所示:

/*
 * Don't match comments containing the term 'data'
 */

我不能只使用零宽度负向后视,\(\*.*\)\@<!\<data\>因为块注释并不总是*在每一行都以 a 开头。

似乎很难/不可能排除多行块注释中的匹配,但语法高亮能够识别哪些部分是注释,哪些不是,那么有没有办法将正则表达式搜索与语法高亮组结合起来?

如果可以结合语法高亮组,我不仅可以排除注释中出现的术语,还可以排除字符串中出现的术语,如下所示:

output = "Sample data: '"+data+"' ...";

并且只有引号之外中间的数据才会被匹配。

有人知道这是否可能吗?

编辑:排除注释进行搜索至少是可行的。我可以定义一个 search() 函数并从其中检查突出显示组,正如某人在此主题. 相关部分:

使用 search() 然后检查语法高亮组是否为注释。如果 synIDattr(synIDtrans(synID(line("."), col("."), 1)), "name") 为注释,则再次调用 search()。

但我不认为这会让 hlsearch 突出显示正确的术语。

相关内容