vim (vi)の置換のお話です。
全行のoldをnewに置換したい場合は普通こうしますよね。
:%s/old/new/g
しかしoldで始まってnewで終わる単語のoldをnewにしたい場合、つまりold○○○newやoldxxxnewをnew○○○newやnewxxxnewに置換したい場合は置換対象の文字列に正規表現を使うため、上記のように単純な置換で実現できません。よって、○○○やxxxの部分を変数のように扱う必要がでてきます。これは以下のようにして実現できます。
:%s/old\(.*\)new/new\1new/g
"(" と ")" で囲まれた部分はホールドバッファと呼び、9つまで使うことができ、\1~\9として呼び出すことができます。つまりold・・・・newの・・・・の部分を正規表現".*"でマッチさせて\1として扱えるため、上記を実行するとnew・・・・newに置換されます。
ホールドバッファは何度でも呼びさせるため、以下のような置換もできます。
:%s/old\(.*\)new/new\1new\1/g
これでold○○○newやoldxxxnewは、new○○○new○○○やnewxxxnewxxxに置換されます。