在我的.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