Александър Иванов
cream в режим „expert“
Превръщане на форматиран (многоредов) абзац в неформатиран (едноредов) абзац
Когато вземате текстове от интернет, често пъти те са форматирани, за да могат да се печатат. Такива са, например текстовете в lib.ru (на руски) или текстовете от инициативата Gutenberg. В тях абзацът е съставен от „къси“ редове (например, не по-дълги от 80 символа). Ако абзаците са разделени с празен ред — добре; ако не са, първият ред от абзаца започва с врезка, отстъп, направен с шпации или с табулатор. В такъв случай може да вмъкнете празен ред пред абзаца с подобна команда:
:%s:^\(\s\):\r\1:
След което можете вече да махнете шпациите и табулаторите пред и след текстовия ред.
При форматираните текстове, ако са подравнени вдясно, това е постигнато чрез вмъкване на повече шпации между думите. Сега трябва да премахнем тези излишни шпации:
:%s:\s\+: :g
Но остава следният проблем — как да „навържете“ кратките редове в един „дълъг“ ред, в един абзац, като се вземе предвид, че абзаците са с различен брой „къси“ редове. Ето най-простото решение, което съм срещал:
1) Поставете в края на текста един празен ред (за да се обработи и последният абзац).
2) Изпълнете
:g/^./ .,/^$/-1 join
Коментар: командата global се прилага към целия текст и търси непразен ред — /^./. Тя прилага командата join към редове, започващи от реда, където е курсорът (.) до реда преди следващия празен ред — /^$/-1. Новото тук е, че диапазонът (range) се определя динамично чрез шаблон за търсене, а -1 е суфикс за „относително“ (спрямо намерения ред) отместване в редове, за да се запази празният ред между абзаците.
3) Не забравяйте да махнете празния ред на края на текста.