2013-10-04 95 views
1

例如,如果我想用<person>Henry</person>替換<person>Nancy</person>在vim中所有出現的<person>*</person>你如何替換vim中html標籤的內容?

目前,我有:

%s:/'<person>*<\/person>/<person>Henry<\/person> 

但很明顯,這是錯誤的。

+0

嘗試'[^ <] *'。 '*'不代表任何東西(你可能是指'。*',但是這會捕獲太多)。 – iamnotmaynard

回答

1

對於單個替換,Vim提供了方便的cit(更改內部標籤)命令。

對於全局替換,答案取決於你的標籤(湯)的結構有多好。 HTML/XML有一個非常靈活的語法,所以你可以用不同的方式表達相同的內容,並且構造一個正則表達式來匹配它們變得越來越困難。 (試圖捉住所有箱子是徒勞的;見this famous answer。)

1
:%s/\v(<person>).\{-}(<\/person>)/\1Henry\2/g 

你想要做什麼,但,是的,什麼英戈說。

  • \v意思是「非常神奇」:這是一種避免脊椎炎的方便方法。

  • (something)(或\(something\)沒有\v改性劑)是一個子表達式,你可以有多達九他們在你的搜索模式,並重復使用\1...\9這些捕捉組在置換方式,甚至在你隨後的搜索模式。 \0代表整場比賽。這裏,開標籤被標記爲\1,結標標記爲\2