如何将正则表达式匹配到vim的行尾?

时间:2016-01-23 15:21:46

标签: regex vim

我有一些台词。我想在这些行中搜索正则表达式,并将匹配追加到匹配行的末尾。例如,这是输入:

foo x

这是预期的输出:

foo x foo

我可以使用替换命令来实现此转换:

%s/\(f\w*\).*/\0 \1/

但我认为这种解决方案有时难以应用或适应某些用例。我使用类似的全局命令寻找一个更简单的解决方案:

g/\f\w*/ s/$/ <??>/

我想先过滤这些行。然后在substitute命令中使用每行中的匹配。是否有一个命令允许我在全局命令中使用匹配来代替<??>

1 个答案:

答案 0 :(得分:1)

我认为您无法从其他命令访问匹配的文本。我认为更容易匹配您想要的内容,然后匹配到行尾(使用.*)并使用\zs重新开始匹配。像这样,例如:

:%s/\v(regex).*\zs/ \1

在此命令中,您在捕获了所有行后重新开始匹配的位置,但您所需的文本也保存在\1中。