【问题标题】:How can I use vim to replace literal "\n" with literal "\\n"?如何使用 vim 将文字 "\n" 替换为文字 "\\n"?
【发布时间】:2017-08-06 06:37:49
【问题描述】:

目前,我有一个 C 字符串定义如下:

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

最外面的双引号是这个字符串。正如我们所见,字符串中的双引号已被\ 转义。

当我使用fprintf()将上面的字符串写入文件时,我看到\n被视为换行符,但事实证明\\n会解决这个问题。

这个文件中有很多文字\n。我在 vim 中尝试了%s/\n/\\n/g,但即使是真正的“换行符”也会受到影响。

我应该如何在 vim 中将文字 \n 替换为 \\n 而不影响真正的换行符?

【问题讨论】:

    标签: c++ regex vim newline


    【解决方案1】:

    如果要将所有文字 \n 替换为文字 \\n,请使用以下命令:

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

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


    字符串

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

    会导致

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

    并且不会替换任何真正的换行符

    【讨论】:

    • 由于搜索词完全用在替换部分,可以简化为:%s/\\n/\\&/g
    【解决方案2】:

    C++11 引入了原始字符串,在这种情况下非常方便。

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

    参见string literals表格(6)的参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 2017-04-12
      • 2015-07-07
      相关资源
      最近更新 更多