对 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 命令编辑模式,例如daw
、ct)
等。完成后,您可以按 <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
在某些文本中我需要找到一个可能是以下之一的字符串
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 命令编辑模式,例如daw
、ct)
等。完成后,您可以按 <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