我想搜索一个字符串,并替换为第一个字符串中包含的第二个字符串。例如,我有以下几行
key1: foo
key2: bar
我的正则表达方式是我想要的方式:
^\s\+\w:.\+
我想用以下内容替换整行:
foo -> key1
bar -> key2
我该怎么做?
答案 0 :(得分:6)
Vim使用\1 \2
等作为后向参考,所以你应该可以使用:
:%s/^\s\+\(\w\+\): \(\w\+\)/\2 -> \1/g
故障:
^\s\+
:字符串开头的一个或多个空格。如果可能为零,请使用*
\(\w\+\)
:将单词字符组捕获到\1
:
字面冒号和空格\(\w\+\)
:第二对的另一个捕获组/\2 -> \1/
替换为后引用。消除领先的空白,并交换两组(这是\v
非常神奇的版本,看起来会更好,避免大量的元字符转义):
:%s/\v\s+(\w+): (\w+)/\2 -> \1/g
答案 1 :(得分:1)
我想出了这个:s
命令,
%s/\v\s*([^:]*):\zs.*/\1/
答案 2 :(得分:1)
替代替代
:%norm <<dWA -> ^]pbD
请注意,按^]
<c-v><esc>