我想搜索一个字符串,并替换为第一个字符串中包含的第二个字符串.例如,我有以下几行
key1: foo
key2: bar
Run Code Online (Sandbox Code Playgroud)
我的正则表达方式是我想要的方式:
^\s\+\w:.\+
Run Code Online (Sandbox Code Playgroud)
我想通过以下方式替换整行:
foo -> key1
bar -> key2
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
Vim使用\1 \2etc作为后向引用,所以你应该能够使用:
:%s/^\s\+\(\w\+\): \(\w\+\)/\2 -> \1/g
Run Code Online (Sandbox Code Playgroud)
分解:
^\s\+:字符串开头的一个或多个空格.使用*有没有可能为零\(\w\+\):捕获单词字符组 \1: 字面冒号和空间\(\w\+\):第二对的另一个捕获组/\2 -> \1/替换后引用.消除领先的空白,并交换两组(这是\v非常神奇的版本,看起来会更好,并避免大量的元字符转义):
:%s/\v\s+(\w+): (\w+)/\2 -> \1/g
Run Code Online (Sandbox Code Playgroud)