正则表达式的HTML搜索和替换
我正在做一个简单的搜索和替换命令在Vim中,我试图逃避<>
和/
字符,所以我可以在我的搜索表达式中使用它们。我意识到有更多优雅的方式来寻找HTML标签,但我真正想要的是一个本地化的搜索和替换命令,将取代<h1>UNKNOWN MISSION</h2>
与<h2>UNKNOWN MISSION</h2>
。这里是我的命令,我试图逃避特殊字符:正则表达式的HTML搜索和替换
:%s/\<h1\>UNKNOWN MISSION\<\/h2\>/\<h2\>UNKNOWN MISSION\<\/h2\>/
模式不匹配。有任何想法吗?
:%s/<h1>UNKNOWN MISSION<\/h2>/<h2>UNKNOWN MISSION<\/h2>/g
似乎是为我工作。你只需要避开反斜杠。
正如@romainl在下面所说的那样,使用另一个分隔符可以消除“/'转义。另外,如果替换中的内容很少,则可以使用'\ zs'和'\ ze'来标记匹配文本的开始和结束,以便替换变得更简单。 ':%s#
你不需要逃避<>
字符,请尝试以下操作:
:%s/<h1>UNKNOWN MISSION<\/h2>/<h2>UNKNOWN MISSION<\/h2>/
我会做以下...
-
将光标放在的
UNKNOWN MISSION
与第一个实例:/<h1<CR>
-
猛拉直到
2
有:yt2
-
替换为:
:%s+<C-r>"2>+<C-r>"1>
其中
<C-r>"
用于插入缺省寄存器的命令行的内容和+
被用作替代分离器,以避免逃逸斜线。插入后,整个命令如下:%s+<h1>UNKNOWN MISSION</h2>+<h1>UNKNOWN MISSION</h1>
添加/g
标志,如果你需要它。
难道你不能用'h2'替换'h1'吗?文档中不应包含包含该字符组合的其他文本。你可以按行查找和替换,以便你(可能)不会干扰'h1'的其他事件。 – mjgpy3 2013-03-25 19:57:23
由于奇怪的原因,头文件分散在整个文档中,并且还有其他h1和h2实例,因此逐行或仅将h1替换为h2是有问题的。 – user1427661 2013-03-25 19:58:53