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

时间:2014-05-09 14:13:16

标签: vim

我正在使用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

我怎样才能做我想做的事?

2 个答案:

答案 0 :(得分:4)

:help s/\n有答案:

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

你也会在那里找到解决方案:插入一个文字反斜杠,通过加倍来逃避它\\ ;要拆分该行,必须使用\r 。是的,这是不一致的,它在sed等类似工具中的工作方式不同,但不幸的是它是如何的。

注释

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

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

答案 1 :(得分:3)

您想要插入双字符序列\n,而不是文字换行符(后者会产生语法错误)。

要更改的示例行是:

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

您的尝试存在一个问题:

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

.后面的"code之间没有字边界。另一个问题是目标中的\用于转义特殊字符(例如,您可以将/字符称为\/),因此\必须自己逃脱。

这应该做的工作:

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

更通用的解决方案可能是:

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

提供在"的每一行上\n"替换printf - 但是会错过任何跨越多行的printf次调用。

至于d替换%d,您在问题中的命令:

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

是对的。