在VIM中进行搜索和替换导致末尾字符问题

51

我想要做的事情是:

%s/Article/<h2>Article</h2>/gi

很不幸,每次我通过我的vim编辑器执行这个命令时,它都会显示:

结尾处有多余字符

为了解决上述问题,我执行了以下操作:

%s/\s*\r*$//

代码可以成功执行,但当我回到原始的搜索替换命令时,它再次显示“尾部字符”,并且不执行搜索和替换操作。

我在这里做错了什么?


2
考虑使用<Article>来避免替换文章。 - johnny
2个回答

59

“尾随字符(trailing characters)”位于你的命令中,而不是你的文档中。

Vim认为你在 Article</ 处结束了命令,然后将h2>/gi视为替换命令的第三个参数。但这些字符并非全部适用于第三个参数,所以它会给出错误。

要解决此问题,你需要转义你的替换命令中的 / 字符。

%s/Article/<h2>Article<\/h2>/gi

14
substitute 命令中可以使用除斜杠以外的其他分隔符,因此您无需在模式中转义斜杠(例如 %s#Article#<h2>Article</h2>#gi)。 - ib.

37

另外,如果你经常需要在正则表达式中使用字面意义的斜杠(XML/HTML/UNIX文件路径),而不想担心每个实例都必须转义,可以使用其他定界符。例如,使用!代替/:

%s!文章!<h2>文章</h2>!gi

我很懒,这通常比手动转义斜杠更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接