Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reformat "gq"ed text in one line per paragraph format in Vim

Tags:

vim

I have some text files previously formatted in vim using "gggqG". Now I need to convert them to one line per paragraph format. I saw a way(using :g command) to do that before, but I have forgot it. Anyone knows?

like image 385
lcltj Avatar asked May 21 '10 06:05

lcltj


2 Answers

There are two approaches I know of:

  • Set textwidth to something big and reformat:

    :set tw=1000000
    gggqG
    
  • Use substitute (this is more appropriate if you want to do it in a mapping):

    :%s/.\zs\n\ze./ /
    

Explanation of the latter:

:%s        " Search and replace across the whole file
/          " Delimiter
.\zs\n\ze. " Look for a character either side of a new-line (so ignore blank lines).
           " The \zs and \ze make the replacement only replace the new-line character.
/ /        " Delimiters and replace the new-line with a space.
like image 134
DrAl Avatar answered Nov 15 '22 20:11

DrAl


If your text paragraphs are separated by a blank line, this seems to work:

:g!/^\s*$/normal vipJ

:g global (multi-repeat)

!/^\s*$/ match all lines except blank lines and those containing only whitespace.

normal enters 'normal' mode

vip visually select inner paragraph

J join lines

like image 33
Curt Nelson Avatar answered Nov 15 '22 19:11

Curt Nelson