I have seen this very interesting article: http://dustycloud.org/blog/vcs-friendly-patchable-document-line-wrapping/ --- basically it is a suggestion for hard-breaking lines of text (for example, in markdown or LaTeX sources) to achieve both easy readability and easy "diff"-ability.
Basically, when I write in LaTeX normally I follow the classical way of "one line per phrase" (hard new line at full stop), and the mandatory blank line for paragraph. This is unfortunately almost unreadable in a diff
of a very long phrase, especially if the change is near the end.
The suggested format is to have a line format (a la gqip
) for every phrase, but keeping the phrases on their own. For example:
This is a short phrase. This, instead, is a very long, probably too long for English, phrase, but in other languages very long phrases are quite common, really --- and so on and so on.
should be formatted as (this has setl tw=60
to be more dramatic)
This is a short phrase.
This, instead, is a very long, probably too long for
English, phrase, but in other languages very long phrases
are quite common, really --- and so on and so on.
I can go from the first form to the final one by hand:
- format the paragraph with
gqip
; - go to the first full stop (or question mark, or a symbol meaning the end of the sentence);
- if it is the end of the paragraph, stop;
- otherwise, insert a linebreak;
- then go to the next line, format again the rest of the paragraph as in point 1 above (still searching how to do this effectively --- clearly
gqip
do not work here unless I temporarily add a blank line above); - repeat until the end of the paragraph.
Is there a way to apply such a type of formatting automatically to a paragraph?
:h formatexpr
- you can define a custom function for thegq
command. Also check out:h formatoptions
, which can be used to apply the formatter automatically for various scenarios.