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

Posted

技术标签:

【中文标题】在 VIM 中搜索和替换导致尾随字符【英文标题】:Search and replace in VIM results in trailing characters 【发布时间】:2011-10-06 13:36:40 【问题描述】:

这就是我想要做的:

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

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

尾随字符

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

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

它执行成功,但是当我回到原来的搜索和替换命令时,它再次读取'尾随字符'并且不执行搜索和替换操作。

我在这里做错了什么?

【问题讨论】:

考虑使用 \ 以避免替换文章
【参考方案1】:

“尾随字符”在您的命令中,而不是您的文档中。

Vim 认为您在Article&lt;/ 处完成了命令,然后将h2&gt;/gi 视为替代命令的第三个参数。但这些字符并非对第三个参数都有效,所以它会给你错误。

要解决这个问题,您需要转义替代品中的 / 字符。

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

【讨论】:

您可以在:substitute 命令中使用斜杠以外的分隔符,因此您不必在模式中转义/(例如%s#Article#&lt;h2&gt;Article&lt;/h2&gt;#gi)。【参考方案2】:

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

%s!Article!&lt;h2&gt;Article&lt;/h2&gt;!gi

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

【讨论】:

以上是关于在 VIM 中搜索和替换导致尾随字符的主要内容,如果未能解决你的问题,请参考以下文章

在VIM中进行快速的查找和替换

Vim 用 unicode 字符替换

Vim-在搜索时捕获字符串,并在替换时使用

前导和尾随空格剪切 + 中间空格替换

在 Vim 中使用 quickfix 列表搜索和替换

vim 简单操作