VIM:查找并替换,重用令牌

时间:2012-09-05 17:43:40

标签: regex vim replace

我在制作适当的查找/替换正则表达式以便在vim

中使用时遇到问题

这是一些SQL:

select avg(field_name1), avg(field_name2), avg(field_name3) from a_table

糟糕,我忘了给结果添加别名:

select avg(field_name1) field_name1,
avg(field_name2) field_name2, avg(field_name3) field_name3 from a_table

所以,在vim中,我确信有一个方便的查找和替换匹配任意[a-z]\+_[a-z]\+内括号,但我无法弄清楚如何在整个匹配后放置该标记

2 个答案:

答案 0 :(得分:15)

尝试以下方法:

:s/(\(.*\))/(\1) \1/g

答案 1 :(得分:4)

将您要在替换/替换中使用的文本与周围的\(\)分组,并使用\1\2等在替换中引用这些反向引用。< / p>

使用[:alnum:]匹配字母数字字符:

:s/(\([[:alnum:]]\+_[[:alnum:]]\+\))/(\1) \1/g

要将正则表达式应用于整个文件,请使用:

:%s/(\([[:alnum:]]\+_[[:alnum:]]\+\))/(\1) \1/g

有关使用反向引用的详细信息,另请参阅:help \1