我有一个单词列表:
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' 和_1584814之外的所有ASCII字符之后的模式中具有特殊含义:
\v
'0'-'9'
'a'-'z'
'A'-'Z'
:%s/\v(\w)(\w\w)/\1y\2/g
:help (
:help \v
如果你没有错过),请在 \v 之前将Vim的正则表达式引擎转换为非常神奇的模式:
您也可以使用更短的模式:
:%s/^./&y
%s 将模式应用于整个文件 .
%s
^. 匹配该行的第一个字符 .
^.
&y 在模式后添加 y .
&y
y
您还必须转义Grouping paranthesis:
这就是诀窍 .
4 回答
解决此问题的一种方法是确保模式由转义括号括起来:
稍微短一些(以及更多魔法)是使用
\v
,这意味着在除了'0'-'9'
,'a'-'z'
,'A'-'Z'
和_1584814之外的所有ASCII字符之后的模式中具有特殊含义:见:
:help (
:help \v
如果你没有错过),请在
\v
之前将Vim的正则表达式引擎转换为非常神奇的模式:您也可以使用更短的模式:
%s
将模式应用于整个文件 .^.
匹配该行的第一个字符 .&y
在模式后添加y
.您还必须转义Grouping paranthesis:
这就是诀窍 .