我有一些台词。我想在这些行中搜索正则表达式,并将匹配追加到匹配行的末尾。例如,这是输入:
foo x
这是预期的输出:
foo x foo
我可以使用替换命令来实现此转换:
%s/\(f\w*\).*/\0 \1/
但我认为这种解决方案有时难以应用或适应某些用例。我使用类似的全局命令寻找一个更简单的解决方案:
g/\f\w*/ s/$/ <??>/
我想先过滤这些行。然后在substitute命令中使用每行中的匹配。是否有一个命令允许我在全局命令中使用匹配来代替<??>
?
答案 0 :(得分:1)
我认为您无法从其他命令访问匹配的文本。我认为更容易匹配您想要的内容,然后匹配到行尾(使用.*
)并使用\zs
重新开始匹配。像这样,例如:
:%s/\v(regex).*\zs/ \1
在此命令中,您在捕获了所有行后重新开始匹配的位置,但您所需的文本也保存在\1
中。