搜索并替换VIM上的字段

时间:2013-06-05 15:25:44

标签: regex vim

我想搜索一个字符串,并替换为第一个字符串中包含的第二个字符串。例如,我有以下几行

    key1: foo
    key2: bar

我的正则表达方式是我想要的方式:

^\s\+\w:.\+

我想用以下内容替换整行:

foo -> key1
bar -> key2

我该怎么做?

3 个答案:

答案 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>