Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vim中复制正则表达式(regex)匹配_Regex_Vim - Fatal编程技术网

在vim中复制正则表达式(regex)匹配

在vim中复制正则表达式(regex)匹配,regex,vim,Regex,Vim,在vim中,使用正则表达式或模式,如何复制匹配项,以便在不替换匹配项的情况下将匹配项直接放在其自身之后 例如,我想将行中逗号之前的所有内容复制到逗号之后: one, two, three, four, 。。。届时将成为: one,one two,two three,three four,four 我可以与*,匹配,也可以与%s/*,全局匹配。我甚至可以使用*,\@使用组捕获进行零宽度匹配。要使用组捕获,请将正则表达式的一部分放在括号之间(它们需要转义),然后将其放在子组1中。下一对括号中的所

在vim中,使用正则表达式或模式,如何复制匹配项,以便在不替换匹配项的情况下将匹配项直接放在其自身之后

例如,我想将行中逗号之前的所有内容复制到逗号之后:

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/