BhishanPoudel
BhishanPoudel

Reputation: 17164

Vim replace multiple empty lines by one empty line

I was looking for a way to replace multiple empty lines by one empty line and encountered with one solution given below:

:g/^$/,/./-j

I understand the following:

g/   replace each occurrences
^$   start to end is an empty, basically empty line
,    replace empty line by comma
.    maybe repeat last command
-j   minus is go up and j is go down

But, I do not understand how period and minus j works in the above code. Vim is a pretty powerful tool and I hope understanding its syntax help further.

Where can we find the documentation of minus j?

How does period and minus j work here?

Upvotes: 9

Views: 858

Answers (2)

Jorge Cedi
Jorge Cedi

Reputation: 1

This is a posible solution

%s/^_s+\n/\r

Upvotes: 0

phd
phd

Reputation: 95139

g    Run the command globally, for the entire file
/^$/ Start executing at an empty line…
,    …and continue executing to…
/./  …the first non-empty line (a line that contains
     regexp '.', i.e. any character)
-j   go up and join all selected lines

That is, the command joins all empty lines from an empty line to the line before the next non-empty.

Upvotes: 11

Related Questions