Vim正则expression式捕获组

我有一个单词列表:

bau ceu diu fou gau 

我想把这个列表变成:

 byau cyeu dyiu fyou gyau 

我试过这个命令:

 :%s/(\w)(\w\w)/\1y\2/g 

为了使捕获组在Vim中工作,我需要做些什么改变?

    解决这个问题的一个方法是确保模式被括号括起来:

     :%s/\(\w\)\(\w\w\)/\1y\2/g 

    稍微短一点(也就是更多的魔术 )就是使用\v ,意思是在除了'0'-'9''a'-'z''A'-'Z'以外'0'-'9'所有ASCII字符'_'有特殊的含义:

     :%s/\v(\w)(\w\w)/\1y\2/g 

    看到:

    • :help \(
    • :help \v

    如果你不想用反斜线(这是你错过的)来避开捕获组,那么在\v把Vim的正则expression式引擎变成非常神奇的模式:

     :%s/\v(\w)(\w\w)/\1y\2/g 

    你也可以使用这个较短的模式:

     :%s/^./&y 
    • %s将模式应用于整个文件。
    • ^. 匹配该行的第一个字符。
    • &y在模式之后添加y

    你也必须逃避分组的假设:

     :%s/\(\w\)\(\w\w\)/\1y\2/g 

    这就是诀窍。