在vim中复制正则表达式(regex)匹配
在vim中,使用正则表达式或模式,如何复制匹配项,以便在不替换匹配项的情况下将匹配项直接放在其自身之后 例如,我想将行中逗号之前的所有内容复制到逗号之后:在vim中复制正则表达式(regex)匹配,regex,vim,Regex,Vim,在vim中,使用正则表达式或模式,如何复制匹配项,以便在不替换匹配项的情况下将匹配项直接放在其自身之后 例如,我想将行中逗号之前的所有内容复制到逗号之后: one, two, three, four, 。。。届时将成为: one,one two,two three,three four,four 我可以与*,匹配,也可以与%s/*,全局匹配。我甚至可以使用*,\@使用组捕获进行零宽度匹配。要使用组捕获,请将正则表达式的一部分放在括号之间(它们需要转义),然后将其放在子组1中。下一对括号中的所
one,
two,
three,
four,
。。。届时将成为:
one,one
two,two
three,three
four,four
我可以与
*,
匹配,也可以与%s/*,
全局匹配。我甚至可以使用*,\@使用组捕获进行零宽度匹配。要使用组捕获,请将正则表达式的一部分放在括号之间(它们需要转义),然后将其放在子组1中。下一对括号中的所有内容都将放在子组2中,以此类推,最多9个组。然后,您可以在替换的替换部分中引用此组。例如:
:%s/\(.*\),/\1,\1
:%s/\v(.*),/&\1
这意味着捕获任何逗号以下的内容,并将其称为group\1
。然后,将此文本替换为(组1),(组1)
。你也可以这样做
:%s/\(.*\),/&\1
因为&
表示“整个匹配文本”(与\0相同)
您还可以使用非常神奇的方法,例如\v
,使其更具可读性。例如:
:%s/\(.*\),/\1,\1
:%s/\v(.*),/&\1
作为旁注,实现相同效果的更简单方法是使用:%norm
,它对每一行应用一组按键。例如,你可以
:%norm yt,f,p
推荐阅读:作为旁注,文档在这里:或者::%s/\(.*\),\zs/\1/