搜索并替换VIM上的字段

Ric*_*ras 1 regex vim

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

    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)

我该怎么做?

Mic*_*ski 6

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)