[英]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.