I want to add *
to the end of each line in Vim.
I tried the code unsuccessfully
:%s/\n/*\n/g
:s///
, \n
corresponds to a null character. The section :help sub-replace-special
is relevant.
Even shorter than the :search command:
:%norm A*
This is what it means:
% = for every line
norm = type the following commands
A* = append '*' to the end of current line
:%s/$/\*/g
should work and so should :%s/$/*/g
.
g
flag is unnecessary.
I think using visual block mode is a better and more versatile method for dealing with this type of thing. Here's an example:
This is the First line.
This is the second.
The third.
To insert " Hello world." (space + clipboard) at the end of each of these lines:
On a character in the first line, press Ctrl-V (or Ctrl-Q if Ctrl-V is paste).
Press jj to extend the visual block over three lines.
Press $ to extend the visual block to the end of each line. Press A then space then type Hello world. + then Esc.
The result is:
This is the First line. Hello world.
This is the second. Hello world.
The third. Hello world.
(example from Vim.Wikia.com)
jj
one can hit G
to move to the last line. This is useful in large files, where pressing j
until you hit the last line isn't practical.
Also:
:g/$/norm A*
Also:
gg<Ctrl-v>G$A*<Esc>
g
is global
command that does something with every matching line. $
matches every line. It could be also ^
or .*
. norm executes commands that you normally use in command mode. So A*
means append *
to the end of line.
If u want to add Hello world at the end of each line:
:%s/$/HelloWorld/
If you want to do this for specific number of line say, from 20 to 30 use:
:20,30s/$/HelloWorld/
If u want to do this at start of each line then use:
:20,30s/^/HelloWorld/
One option is:
:g/$/s//*
This will find every line end anchor and substitute it with *
. I say "substitute" but, in actual fact, it's more of an append since the anchor is a special thing rather than a regular character. For more information, see Power of g - Examples.
You don't really need the g
at the end. So it becomes:
:%s/$/*
Or if you just want the *
at the end of, say lines 14-18:
:14,18s/$/*
or
:14,18norm A*
...and to prepend (add the beginning of) each line with *,
%s/^/*/g
:%s/\n/*\r/g
Your first one is correct anywhere else, but Vim has to have different newline handling for some reason.
%s/\s*$/\*/g
this will do the trick, and ensure leading spaces are ignored.
Success story sharing
I*
rather than0i*
will save you one keystroke.:
, this will pre-fill the command with:'<,'>
which you can then make into:'<,'>norm A*
I
instead -:%norm I*