diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2018-08-29 11:08:12 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2018-08-29 11:08:12 +1200 |
commit | 9f48fbb4fbef55040a8c28bf17f13bbde6b24730 (patch) | |
tree | f732267064e4ecb893349b4548345c0f66de56bb | |
parent | Convert a few stridx() to alternative forms (diff) | |
download | dotfiles-9f48fbb4fbef55040a8c28bf17f13bbde6b24730.tar.gz dotfiles-9f48fbb4fbef55040a8c28bf17f13bbde6b24730.zip |
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.
-rw-r--r-- | vim/after/ftplugin/mail.vim | 5 | ||||
-rw-r--r-- | vim/autoload/mail.vim | 20 |
2 files changed, 25 insertions, 0 deletions
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 <buffer> <LocalLeader>[' \ . '|ounmap <buffer> <LocalLeader>]' \ . '|xunmap <buffer> <LocalLeader>[' \ . '|xunmap <buffer> <LocalLeader>]' + +" Quick map to strip multiple blank lines in the entire buffer; this comes up +" a lot when replying to stripped HTML mail +nnoremap <buffer> <silent> <LocalLeader>x + \ :<C-U>call mail#ContractMultipleBlankLines()<CR> 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 |