在VIM中搜索和替换会导致尾随字符

Par*_*lia 30 linux vi vim command-line-arguments

这就是我试图做的事情:

%s/Article/<h2>Article</h2>/gi
Run Code Online (Sandbox Code Playgroud)

不幸的是,每次我通过我的vim编辑器执行此命令时,它都说:

尾随字符

为了缓解上述情况,我执行了以下操作:

%s/\s*\r*$//
Run Code Online (Sandbox Code Playgroud)

并且它成功执行,但当我返回原始搜索和替换命令时,它再次显示"尾随字符"并且不执行搜索和替换操作.

我在这做错了什么?

Mer*_*ham 41

"尾随字符"在您的命令中,而不是您的文档.

Vim认为你完成了命令Article</,然后将其h2>/gi视为substitute命令的第三个参数.但是这些字符对于第三个参数都不是全部有效,所以它会给你错误.

要解决此问题,您需要转义/替换中的角色.

%s/Article/<h2>Article<\/h2>/gi
Run Code Online (Sandbox Code Playgroud)

  • 您可以在`:substitute`命令中使用除斜杠之外的分隔符,因此您不必在模式中转义`/`(例如,`%s#Article#<h2> Article </ h2> #gi`) . (8认同)

小智 29

此外,如果您经常需要在正则表达式(XML/HTML/UNIX文件路径)中使用文字正斜杠,并且不想担心转义每个实例,则可以使用不同的分隔符.例如,使用!代替 /:

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

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