Putting "\n" in my .c or .cpp file using vim
I'm using vim to make my programs in c/c++ and I would like to know how can I put "n" (which represents a newline) in my code or use "%" using :%s
.
For instance, sometimes I forget to put "%" in front of "d" or "f" in many lines or forget to put "n" in some printf()
calls.
printf("This is my d code.", x);
But the following command does not work, it puts a space in place of "n"!
:%s/<code.>/code.n/gc
or
:%s/<d>/%d/gc
How can I do what I want?
The :help s/n
has the answer:
n insert a <NL> (<NUL> in the file)
(does NOT break the line) *s/n*
You'll also find the solution there: to insert a literal backslash, escape it by doubling ; to split the line, a
r
has to be used . Yes, this is inconsistent, and it works differently in similar tools like sed
, but that's unfortunately how it is.
Notes
n
doesn't insert a space, but the special <NL>
character, which usually is shown as ^@
. <code.>
isn't right; to match a literal period, you have to escape it: .
. Else, it matches any character. Likewise, the .
usually isn't a keyword character, so the >
boundary wouldn't match. &
for it. Also read up on capture groups ( :help /(
) and the submatch references :help s/1
. This is a better way: :%s/<code./&n/gc
(I don't see a problem with the second substitution.)
You want to insert the two-character sequence n
, not a literal newline (the latter would create a syntax error).
A sample line to be changed is:
printf("This is my d code.", x);
One problem with your attempt:
:%s/<code.>/code.n/gc
is that there is no word boundary between the .
and the "
following the word code
. The other problem is that in the target is used to escape special characters (for example you can refer to a
/
character as /
), so the must itself be escaped.
This should do the job:
:%s/<code."/code.n"/gc
A more general solution might be:
:g/printf/s/"/n"/egc
which offers to replace "
by n"
on each line that contains printf
-- but that will miss any printf
calls that span more than one line.
As for replacing the d
by %d
, the command you have in your question:
:%s/<d>/%d/gc
is correct.
链接地址: http://www.djcxy.com/p/49338.html上一篇: 文件以字符串形式存储在bash中