2013-03-25 51 views
1

我正在做一個簡單的搜索和替換命令在Vim中,我試圖逃避<>/字符,所以我可以在我的搜索表達式中使用它們。我意識到有更多優雅的方式來尋找HTML標籤,但我真正想要的是一個本地化的搜索和替換命令,將取代<h1>UNKNOWN MISSION</h2><h2>UNKNOWN MISSION</h2>。這裏是我的命令,我試圖逃避特殊字符:正則表達式的HTML搜索和替換

:%s/\<h1\>UNKNOWN MISSION\<\/h2\>/\<h2\>UNKNOWN MISSION\<\/h2\>/ 

模式不匹配。有任何想法嗎?

+0

難道你不能用'h2'替換'h1'嗎?文檔中不應包含包含該字符組合的其他文本。你可以按行查找和替換,以便你(可能)不會干擾'h1'的其他事件。 – mjgpy3 2013-03-25 19:57:23

+0

由於奇怪的原因,頭文件分散在整個文檔中,並且還有其他h1和h2實例,因此逐行或僅將h1替換爲h2是有問題的。 – user1427661 2013-03-25 19:58:53

回答

3

:%s/<h1>UNKNOWN MISSION<\/h2>/<h2>UNKNOWN MISSION<\/h2>/g

似乎是爲我工作。你只需要避開反斜槓。

+0

正如@romainl在下面所說的那樣,使用另一個分隔符可以消除「/'轉義。另外,如果替換中的內容很少,則可以使用'\ zs'和'\ ze'來標記匹配文本的開始和結束,以便替換變得更簡單。 ':%s# UNKNOWN MISSION#2#g'如需更多幫助,請參閱':h \ zs' – 2013-03-25 21:01:30

1

你不需要逃避<>字符,請嘗試以下操作:

:%s/<h1>UNKNOWN MISSION<\/h2>/<h2>UNKNOWN MISSION<\/h2>/ 
1

我會做以下...

  1. 將光標放在的UNKNOWN MISSION與第一個實例:

    /<h1<CR> 
    
  2. 猛拉直到2有:

    yt2 
    
  3. 替換爲:

    :%s+<C-r>"2>+<C-r>"1> 
    

    其中<C-r>"用於插入缺省寄存器的命令行的內容和+被用作替代分離器,以避免逃逸斜線。插入後,整個命令如下:

    %s+<h1>UNKNOWN MISSION</h2>+<h1>UNKNOWN MISSION</h1> 
    

添加/g標誌,如果你需要它。

相關問題