Search code examples
vimtext-width

vim text width reformat


I want to reformat my file so the max line width is 79. I did :set tw=79 and gggqG and the results weren't what I expected. When a line is less than 79 col, characters from the line below it move up and lines with over 79 col don't break into two lines.

edit: Well I was semi-mistaken in that it DOES break lines over 79 except in the line with asterisks.

--CONVENTIONS**************************************************************************************

In addition it still moves characters up when the line has <79.


Solution

  • One possible solution, although not the best one.

    Undefine formatexpr and let external fold program to format your text to 79 characters width.

    :set formatexpr=
    :set formatprg=fold\ -w\ 79
    

    And now:

    gg              # Go to beginning of file.
    gq              # Format until...
    G               # End of file.
    

    And last remove those carriage returns (^M):

    :%s/\r//g
    

    In my test it changed some accented characters and some other lines were mangled, but try it yourself. Else you may write your own format function and use it with formatexpr option.