How can I add a string to the end of each line in Vim?

RegexVimReplaceMatch

Regex Problem Overview


I want to add * to the end of each line in Vim.

I tried the code unsuccessfully

:%s/\n/*\n/g

Regex Solutions


Solution 1 - Regex

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

Solution 2 - Regex

:%s/$/\*/g

should work and so should :%s/$/*/g.

Solution 3 - Regex

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)

Solution 4 - Regex

Also:

:g/$/norm A*

Also:

gg<Ctrl-v>G$A*<Esc>

Solution 5 - Regex

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/

Solution 6 - Regex

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.

Solution 7 - Regex

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*

Solution 8 - Regex

...and to prepend (add the beginning of) each line with *,

%s/^/*/g

Solution 9 - Regex

:%s/\n/*\r/g

Your first one is correct anywhere else, but Vim has to have different newline handling for some reason.

Solution 10 - Regex

%s/\s*$/\*/g

this will do the trick, and ensure leading spaces are ignored.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionL&#233;o L&#233;opold Hertz 준영View Question on Stackoverflow
Solution 1 - RegexCyber OliveiraView Answer on Stackoverflow
Solution 2 - RegexdirkgentlyView Answer on Stackoverflow
Solution 3 - RegexnicoleView Answer on Stackoverflow
Solution 4 - RegexBrian CarperView Answer on Stackoverflow
Solution 5 - RegexutkarshView Answer on Stackoverflow
Solution 6 - RegexpaxdiabloView Answer on Stackoverflow
Solution 7 - RegexPedro NorwegoView Answer on Stackoverflow
Solution 8 - RegexUser 1058612View Answer on Stackoverflow
Solution 9 - Regexuser42092View Answer on Stackoverflow
Solution 10 - Regexng.View Answer on Stackoverflow