在 VI 编辑器命令窗口中将源字替换为包含 /(正斜杠)的目标字

在 VI 编辑器命令窗口中将源字替换为包含 /(正斜杠)的目标字

我在 cmake 编译时遇到问题,其中有数千个/root/repo/& 我想用 替换/repo/。因为/在源代码中命令

:%s/srcWrd/dstwrd/gc 

无法正常工作。请在此处指导如何继续。

示例输入:文件中的一行包含

/root/repo/my-gerrit/myData.cpp

它应该看起来像

/repo/my-gerrit/myData.cpp

我已经尝试在文件中使用以下命令,但它没有按预期工作。

:%s\/root\/\repo\/repo/gc

答案1

在你给出的例子中,文件包含

/root/repo/my-gerrit/myData.cpp

这可以改为

/repo/my-gerrit/myData.cpp

使用命令:%s/\root//gc

您尝试了%s\/root\/\repo\/repo/gc,它缺少正常的正斜杠。要替换/root/repo//repo/命令将是%s/\/root\/repo\//\/repo\//gc

请注意,要替换的正斜杠用 转义\。作为命令一部分的正斜杠是不是逃走了。

答案2

虽然使用反斜杠转义正斜杠是一种选择,但使用完全不同的分隔符要容易得多。

例如:

:%s#/root/repo/#/repo/#gc

或者:

:%s+/root/repo/+/repo/+gc

或者:

:%s,/root/repo/,/repo/,gc

您可以使用几乎任何符号作为命令中的分隔符:s,因此应该很容易找到不需要在模式或替换中转义该符号的符号。

也可以看看:help E146

相关内容