在 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</
处完成了命令,然后将h2>/gi
视为替代命令的第三个参数。但这些字符并非对第三个参数都有效,所以它会给你错误。
要解决这个问题,您需要转义替代品中的 /
字符。
%s/Article/<h2>Article<\/h2>/gi
【讨论】:
您可以在:substitute
命令中使用斜杠以外的分隔符,因此您不必在模式中转义/
(例如%s#Article#<h2>Article</h2>#gi
)。【参考方案2】:
另外,如果您经常需要在您的正则表达式(XML/html/UNIX 文件路径)中使用文字正斜杠并且不想担心转义每个实例,您可以使用不同的分隔符。例如,使用!而不是 /:
%s!Article!<h2>Article</h2>!gi
我很懒,这通常比手动转义斜线更容易。
【讨论】:
以上是关于在 VIM 中搜索和替换导致尾随字符的主要内容,如果未能解决你的问题,请参考以下文章
在VIM中进行快速的查找和替换
Vim 用 unicode 字符替换
Vim-在搜索时捕获字符串,并在替换时使用
前导和尾随空格剪切 + 中间空格替换
在 Vim 中使用 quickfix 列表搜索和替换
vim 简单操作