对 vim 中捕获组的反向引用

Backreference to capturing group in vim

在某些文本中我需要找到一个可能是以下之一的字符串

foo#foo%foo
foo#foo%bar
foo#bar%foo
foo#bar%bar
bar#foo%foo
bar#foo%bar
bar#bar%foo
bar#bar%bar

我可以像这样写正则表达式匹配器

/\(foo\|bar\)#\(foo\|bar\)%\(foo\|bar\)

效果很好。

但我想避免在匹配器中重复捕获组。

如果我写类似

/\(foo\|bar\)#%

它只匹配我在开头提到的第一个和最后一个可能的字符串。

问:我可以参考之前的捕获组本身,而不是之前的比赛吗?

我完全不想创建和重用子模式并像@Amadan 和@lcd047 那样重用它们 alluded to 但是 Vim 不支持我所知道的这种行为。

作为替代方案,您可以在编辑模式时使用 <c-f> 打开 command-line-window。在此 window 中,您可以使用正常的 Vim 命令编辑模式,例如dawct) 等。完成后,您可以按 <cr> 和 运行 search/command。

有个不错的Vimcast episode about this: Refining search patterns with the command-line window.

如需更多帮助,请参阅:

:h command-line-window
:h q/
:h c_Ctrl-f