Предположим, что Вы ввели длинный документ в энергии с автоматической строкой, повреждающейся на, таким образом, все строки были повреждены в, скажем, 79 символах. Вы, возможно, даже применили форматирование к целому документу для повреждения всех строк в той длине.
Абзацы разграничены в Вашем документе пустыми строками.
Теперь Вы решаете, что не хотите разрывы строки в рамках абзацев вообще.
Как можно удалить все разрывы строки в рамках абзацев, не устраняя границы абзаца в целом?
Я сделал этот быстрый и идиотичный взлом, но ищу надлежащий путь.
:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ - join all lines in the file
:%s/@@@@@/\r\r/g - replace @@@@@ with line breaks
Я думаю, что это делает то, что Вы хотите: удостоверьтесь, что существует пустая строка в конце файла, затем присоединитесь к каждому абзацу (завершенный пустой строкой).
G:a
.
:g/^./ .,/^$/-1 join
Объяснение: сначала пойдите в конец файла и добавьте дополнительную пустую строку с :a
(возможно, существует более изящный способ сделать это; в интерактивном режиме можно заменить первые три строки o<ESC>
). Затем для каждой непустой строки, которую не рассмотрели все же (:g/^./
), подайте заявку join
управляйте к диапазону, запускающемуся в выбранной строке (.
) и окончание одной строки перед следующей пустой строкой (/^$/-1
).
Дополнительно, :g/^$/d
если Вы не хотите, чтобы какая-либо пустая строка осталась (затем, можно взлететь -1
).
Это должно сделать это:
:set tw=99999
gggqG
tw
установлен на некоторое значение, по крайней мере, столь же большое как количество символов в самом длинном абзаце. gg
перемещает курсор в первую строку; gq
команда должна переформатировать; G
перемещает курсор в последнюю строку, говоря gq
переформатировать от текущей позиции курсора до последней строки.
Не мог бы быть самый чистый способ сделать это, но здесь то, что я использовал бы:
ggqav}bgJ}wq999@a # go to the top of the file (gg)
# start recording macro "a" (qa)
# select the entire paragraph (v})
# go back one word so as not to join the blank line (b)
# join the selected lines without spaces (gJ)
# go to first word of the next paragraph (}w)
# finish recording the macro (q)
# 999 times (arbitrary number of paragraphs to join)
# run macro "a" (@a)
(Работы в VIM 7.2.)
В зависимости от точно, как абзацы были разделены, когда они были первоначально отформатированы, можно хотеть заменить gJ
команда (присоединяются без пробелов) с J
команда (присоединяются к пробелам).
Произвольное 999
считайте только потребности быть, по крайней мере, количеством абзацев в файле - можно выбрать большее число, если Вы хотите и теряете только циклы процессора. Принимая одну и только одну пустую строку между абзацами, можно получить более точное использование количества абзаца:
:%s/^$//gn # returns "999 matches on 999 lines"