在我的.c或.cpp文件中使用vim放置“\ n”

我正在使用vim在c / c ++中创建我的程序,我想知道如何在代码中放置“ n”(代表换行符)或使用“%”使用:%s

例如,有时我忘记在许多行中将“%”放在“d”或“f”的前面,或忘记在某些printf()调用中放置“ n”。

printf("This is my d code.", x);

但是下面的命令不起作用,它会为“ n”放置一个空格!

:%s/<code.>/code.n/gc

要么

:%s/<d>/%d/gc

我该怎么做我想要的?


The :help s/n有答案:

  n    insert a <NL> (<NUL> in the file)
    (does NOT break the line)              *s/n*

您还可以在其中找到解决方案: 插入文字反斜杠,通过加倍将其转义 ; 为了分割线,必须使用r 。 是的,这是不一致的,它在像sed这样的类似工具中工作方式不同,但不幸的是它是如此。

笔记

  • n不插入空格,而是特殊的<NL>字符,通常显示为^@
  • <code.>不正确; 要匹配一个文字时期,你必须逃避它: . 。 否则,它匹配任何角色。 同样, . 通常不是关键字字符,所以>边界不匹配。
  • 您不需要重复替换中的匹配文本,您可以使用&为它。 另请阅读捕获组( :help /( )和submatch references :help s/1这是一个更好的方法:
  • :%s/<code./&n/gc
    

    (我没有看到第二次替换出现问题。)


    你想插入两个字符的序列n ,而不是一个文字换行符(后者会创建一个语法错误)。

    要更改的示例行是:

    printf("This is my d code.", x);
    

    你的尝试有一个问题:

    :%s/<code.>/code.n/gc
    

    在这之间没有词语边界."后面的单词code 。另一个问题是在目标中用于转义特殊字符(例如,可以将/字符称为/ ),所以本身必须被转义。

    这应该完成这项工作:

    :%s/<code."/code.n"/gc
    

    更一般的解决方案可能是:

    :g/printf/s/"/n"/egc
    

    它可以在包含printf每一行代替" by n" ,但会错过跨越多行的printf调用。

    至于更换d%d ,命令你必须在你的问题:

    :%s/<d>/%d/gc
    

    是正确的。

    链接地址: http://www.djcxy.com/p/49337.html

    上一篇: Putting "\n" in my .c or .cpp file using vim

    下一篇: remove newlines from a register in vim?