Предположим, вы набрали длинный документ в vim с автоматическим разрывом строки, поэтому все строки были разбиты, скажем, на 79 символов. Возможно, вы даже применили форматирование ко всему документу, чтобы разбить все строки на эту длину.
Абзацы размечены в вашем документе пустыми строками.
Теперь вы решаете, что вообще не хотите разрывов строк в абзацах.
Как вы можете удалить все разрывы строк в абзацах, не удаляя при этом границы абзацев в целом?
Я сделал этот быстрый и идиотский взлом, но ищу правильный путь.
:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ - join all lines in the file
:%s/@@@@@/\r\r/g - replace @@@@@ with line breaks
vim
newlines
carriage-return
dggoldst
источник
источник
Ответы:
Я думаю, что это делает то, что вы хотите: убедитесь, что в конце файла есть пустая строка, затем присоедините каждый абзац (завершается пустой строкой).
Объяснение: сначала перейдите в конец файла и добавьте дополнительную пустую строку с помощью
:a
(возможно, есть более элегантный способ сделать это; в интерактивном режиме вы можете заменить первые три строки наo<ESC>
). Затем для каждой непустой строки, которая еще не была рассмотрена (:g/^./
), применитеjoin
команду к диапазону, начиная с выбранной строки (.
) и заканчивая одной строкой перед следующей пустой строкой (/^$/-1
).По желанию,
:g/^$/d
если вы не хотите, чтобы оставалась пустая строка (вы можете убрать-1
).источник
:g
, которая применяет команду ко всем совпадающим строкам; Посмотрите:help :g
и, возможно, этот поток о том, как:g
ведет себя, когда вы удаляете разрывы строк .:$pu _
в конце поставить регистр черной дыры, в результате чего в конце появится пустая строка.Это должно сделать это:
tw
устанавливается на какое-то значение, по крайней мере, такое же, как количество символов в самом длинном абзаце.gg
перемещает курсор на первую строку;gq
команда для переформатирования;G
перемещает курсор на последнюю строку, сообщаяgq
о необходимости переформатирования от текущего местоположения курсора до последней строки.источник
Установите курсор внутри нужного абзаца
Тип:
vipJ
(
vip
выделяет текущий абзац,J
объединяет все строки)источник
Может быть, это не самый чистый способ сделать это, но вот что я бы использовал:
( Работает в VIM 7.2. )
В зависимости от того, как именно абзацы были разделены при первоначальном форматировании, вы можете заменить
gJ
команду (объединить без пробелов) наJ
команду (объединить с пробелами).Произвольное
999
количество должно быть не меньше количества абзацев в файле - вы можете выбрать большее число, если хотите, и ничего не потерять, кроме циклов процессора. Предполагая одну и только одну пустую строку между абзацами, вы можете получить более точное количество абзацев, используя:источник