我想搜索一個字符串並用第一個字符串中包含的第二個字符串替換。例如,我有以下行搜索並替換VIM上的字段
key1: foo
key2: bar
我正則表達式是maches此行我所希望的方式是:
^\s\+\w:.\+
我想類似的東西來代替整行:
foo -> key1
bar -> key2
我該怎麼做?
我想搜索一個字符串並用第一個字符串中包含的第二個字符串替換。例如,我有以下行搜索並替換VIM上的字段
key1: foo
key2: bar
我正則表達式是maches此行我所希望的方式是:
^\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
注意^]
通過按<c-v><esc>
我認爲用':g'會更好。 – Kent
@Kent。我能理解這一點。 ':g/\ v \ s + \ w +:\ s * \ w +/norm ^] pbD'是一個更大的命令。我可能會運行替代。然而,有多種解決方案是很好的。特別是當我們對有關文本知之甚少時。 –
獲得我認爲'FOO - > key1'是沒有結果的OP想,他可能想'foo換成與key1'但不是100%肯定。 – Kent