wyc
wyc

Reputation: 55283

Adding empty line between paragraphs with VIM

I'm looking for a single command to turn this:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Ipsum dolor sit amet, consectetur adipisicing elit.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

into this:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Ipsum dolor sit amet, consectetur adipisicing elit.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Any suggestions?

Upvotes: 0

Views: 242

Answers (2)

romainl
romainl

Reputation: 196596

:%s/\.\s*\n\(\S\)/\.\r\r\1

Obtains the desired result with the given sample (which contains a pesky trailing space).

We search for a dot followed by zero or more whitespace characters (because of the pesky trailing space), followed by a newline, followed by a non-whitespace character that we capture.

We replace with a dot, followed by two newlines and the non-whitespace character that we captured earlier.

(edit)

The following substitution is more generic and suits your non-specified requirements:

  • it doesn't care about how each "paragraph" ends
  • it respects indenting as well

so…

:%s/\s*\n\(\s*\S\)/\r\r\1

If you want to normalize your buffer and remove indenting:

:%s/\s*\n\(\s*\)\(\S\)/\r\r\2

or, with less backslashes…

:%s/\v\s*\n(\s*)(\S)/\r\r\2

Upvotes: 1

yakiang
yakiang

Reputation: 1634

If it's wrapped, that means a paragraph is actually only ONE line, and you're actually adding a single blank line between lines. try:

:g/.\n\n\@!/norm o

It's explained here .
And if it's not wrapped (means there're many lines in ONE paragraph), I've no idea how to do it, either. But according to the explaination of that site, you can try to manage it by writing your own regex rules !

Upvotes: 4

Related Questions