Присоединитесь к строкам в абзацах в энергии

Предположим, что Вы ввели длинный документ в энергии с автоматической строкой, повреждающейся на, таким образом, все строки были повреждены в, скажем, 79 символах. Вы, возможно, даже применили форматирование к целому документу для повреждения всех строк в той длине.

Абзацы разграничены в Вашем документе пустыми строками.

Теперь Вы решаете, что не хотите разрывы строки в рамках абзацев вообще.

Как можно удалить все разрывы строки в рамках абзацев, не устраняя границы абзаца в целом?

Я сделал этот быстрый и идиотичный взлом, но ищу надлежащий путь.

:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ           - join all lines in the file
:%s/@@@@@/\r\r/g   - replace @@@@@ with line breaks
13
задан 14.11.2012, 20:53

3 ответа

Я думаю, что это делает то, что Вы хотите: удостоверьтесь, что существует пустая строка в конце файла, затем присоединитесь к каждому абзацу (завершенный пустой строкой).

G:a

.
:g/^./ .,/^$/-1 join

Объяснение: сначала пойдите в конец файла и добавьте дополнительную пустую строку с :a (возможно, существует более изящный способ сделать это; в интерактивном режиме можно заменить первые три строки o<ESC>). Затем для каждой непустой строки, которую не рассмотрели все же (:g/^./), подайте заявку join управляйте к диапазону, запускающемуся в выбранной строке (.) и окончание одной строки перед следующей пустой строкой (/^$/-1).

Дополнительно, :g/^$/d если Вы не хотите, чтобы какая-либо пустая строка осталась (затем, можно взлететь -1).

12
ответ дан 07.12.2019, 11:29

Это должно сделать это:

:set tw=99999
gggqG

tw установлен на некоторое значение, по крайней мере, столь же большое как количество символов в самом длинном абзаце. gg перемещает курсор в первую строку; gq команда должна переформатировать; G перемещает курсор в последнюю строку, говоря gq переформатировать от текущей позиции курсора до последней строки.

12
ответ дан 07.12.2019, 11:29

Не мог бы быть самый чистый способ сделать это, но здесь то, что я использовал бы:

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"
2
ответ дан 07.12.2019, 11:29

Теги

Похожие вопросы