vim, 用\(...\)將搜尋到的pattern存下來

這個運用,舉個例子來說明: 如果我們要將內容所有 A loves B 改成 B loves A, 但是檔案內容中的A有很多個人, B也是, 我們若一種組合就打一次命令那會很耗時; 不過,我們知道規則就是 A loves B中,要把 A 與 B互換就好,不管A或B是誰; 所以,我們只要來match任何符合 A loves B的字串,把A 與 B的內容存下來,換成 B loves A就好。
這時我們就需要用\(\)將要存的字串包起來,被包起來的字串 vim 會依序存到\1,\2,\3,...。所以,我們只要一行指令就可以完成
:%s/\(\w\+\) loves \(\w\+\)/\2 loves \1/g

John loves Mary.
Mary loves Jack.
Jack loves Rose.

就會變成
Mary loves John.
Jack loves Mary.
Rose loves Jack.

沒有留言: