我该如何使用vim将字面量"\n"替换为字面量"\\n"?

3

目前,我有一个定义为以下内容的C字符串:

std::string str = "printf(\"Hello world\n\")"; 

最外层的双引号是用来定义这个字符串的。我们可以看到,字符串中的双引号已经被\转义了。

当我使用fprintf()将上述字符串写入文件时,我发现\n被视为换行符,但实际上\\n才是解决问题的方法。

在这个文件中有很多直接的\n。我尝试在vim中使用%s/\n/\\n/g,但连真正的“换行符”也被影响了。

我该如何在vim中只替换直接的\n\\n,而不影响真正的换行符呢?

2个回答

5

如果你想用命令替换所有字面量\n为字面量\\n,那么请使用以下命令:

:%s/\\n/\\\\n/g

也就是说,每个反斜杠都必须单独进行转义。

这个字符串

std::string str = "printf(\"Hello world\n\")"; 

会导致
std::string str = "printf(\"Hello world\\n\")";

没有真正的 换行符 会被替换。


由于搜索词完全用于替换部分,可以简化为 :%s/\\n/\\&/g - Sundeep

2
C++11引入了原始字符串,这在这种情况下非常方便。
std::string str = R"(printf("Hello world\n"))";

请参考第6个表格中字符串字面量的形式。

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