[英]Search and replace with fields on VIM
我想搜索一个字符串,并替换为第一个字符串中包含的第二个字符串。 例如我有以下几行
key1: foo
key2: bar
我正则表达式的正则表达式是:
^\s\+\w:.\+
我想用以下内容代替整行:
foo -> key1
bar -> key2
我该怎么做?
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
我想出了:s
命令,
%s/\v\s*([^:]*):\zs.*/\1/
替代替代
:%norm <<dWA -> ^]pbD
请注意, ^]
是通过按<cv><esc>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.