Элегантное решение может быть основано на команде :vglobal
(или, которая является
то же самое, на :global
с !
модификатором),
:v/\_s*\S/d
Эта команда выполняет :delete
в каждой строке, которая не имеет
непробельные символы в нем и после него в оставшемся тексте до конца
буфера. Таким образом, команда удаляет хвостовые пустые строки.
Удалить пустые строки (в строгом смысле, в отличие от пустых).
содержащий только пробел) в конце буфера, измените шаблон в этом
:vglobal
команда следующим образом.
:v/\n*./d
На огромных разреженных файлах, содержащих большие блоки последовательных пробелов
символы (начиная с сотен килобайт пробелов) выше
Команды могут иметь неприемлемую производительность. Если это так, то же самое
Изящная идея может быть использована для преобразования этих :vglobal
команд в много
более быстрые команды удаления диапазона.
Для пустых строк:
:0;/^\%(\_s*\S\)\@!/,$d
Для пустых строк:
:0;/^\%(\n*.\)\@!/,$d
Суть обеих команд одинакова, то есть удаление строк
принадлежность к диапазону, указанному для :delete
. Диапазоны определены
в соответствии с этими тремя шагами:
Переместите курсор на первую строку буфера перед интерпретацией
остальная часть диапазона (0;
, см. :help :;
). Разница между 0
и 1
номера строк означают, что первый допускает совпадение при первом
строка, когда в данном диапазоне используется шаблон поиска.
Поиск строки, где шаблон, описывающий нехвостую заготовку
строка (\_s*\S
или \n*.
) не совпадает (отрицание связано с \@!
атом). Установите начальную линию диапазона на эту линию.
Установить конечную строку диапазона на последнюю строку буфера.
Чтобы выполнить одну из вышеперечисленных команд при сохранении, запустите ее с помощью автоматической команды
на BufWrite
событие (или его синоним BufWritePre
).