From 9f48fbb4fbef55040a8c28bf17f13bbde6b24730 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Wed, 29 Aug 2018 11:08:12 +1200 Subject: Add mapping to contract multiple blank lines This should be a command, and may very well be useful outside of mail contexts, but this will do OK for now. --- vim/after/ftplugin/mail.vim | 5 +++++ vim/autoload/mail.vim | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/vim/after/ftplugin/mail.vim b/vim/after/ftplugin/mail.vim index 3aa3fec3..df0f043d 100644 --- a/vim/after/ftplugin/mail.vim +++ b/vim/after/ftplugin/mail.vim @@ -83,3 +83,8 @@ let b:undo_ftplugin .= '|nunmap [' \ . '|ounmap ]' \ . '|xunmap [' \ . '|xunmap ]' + +" Quick map to strip multiple blank lines in the entire buffer; this comes up +" a lot when replying to stripped HTML mail +nnoremap x + \ :call mail#ContractMultipleBlankLines() diff --git a/vim/autoload/mail.vim b/vim/autoload/mail.vim index baff4bbf..0c3b7eb7 100644 --- a/vim/autoload/mail.vim +++ b/vim/autoload/mail.vim @@ -65,3 +65,23 @@ function! mail#NewBlank(count, up, visual) abort endif endfunction + +" Quick map to strip multiple blank lines in the entire buffer; this comes up +" a lot when replying to stripped HTML mail. This should really be a command, +" but I'll do that Later(TM). +function! mail#ContractMultipleBlankLines() abort + let l:deletions = [] + let l:blank = 0 + for l:num in range(1, line('$')) + if strlen(getline(l:num)) > 0 + let l:blank = 0 + elseif l:blank + let l:deletions += [l:num] + else + let l:blank = 1 + endif + endfor + for l:num in reverse(l:deletions) + execute l:num . 'delete' + endfor +endfunction -- cgit v1.2.3