]> git.rmz.io Git - dotfiles.git/commitdiff
vim: don't jump when stripping whitespace
authorSamir Benmendil <me@rmz.io>
Thu, 27 Aug 2015 00:36:47 +0000 (01:36 +0100)
committerSamir Benmendil <me@rmz.io>
Thu, 27 Aug 2015 01:33:49 +0000 (02:33 +0100)
vim/vimrc

index c74b75c6708e6fde68ec96b8a4bd44d140f69bc0..5a271cb86229d480bb200d30c72ef9faf362d8b7 100644 (file)
--- a/vim/vimrc
+++ b/vim/vimrc
@@ -338,8 +338,21 @@ nnoremap <leader>p* :silent! set paste<CR>"*p:set nopaste<CR>
 " paste from clipboard
 nnoremap <leader>p+ :silent! set paste<CR>"+p:set nopaste<CR>
 
-" Clean trailing whitespace
-nnoremap <silent> <leader>ww m':%s/\s\+$//<cr>:let @/=''<cr>``zz
+" strip trailing whitespace
+function! StripWhitespace(line1, line2, ...)  " {{{2
+  let s_report = &report
+  let &report=0
+  let pattern = a:0 ? a:1 : '[\\]\@<!\s\+$'
+  let oldview = winsaveview()
+  exe 'keepjumps keeppatterns '.a:line1.','.a:line2.'substitute/'.pattern.'//e'
+  if oldview != winsaveview()
+    redraw
+  endif
+  call winrestview(oldview)
+  let &report = s_report
+endfunction  " }}}2
+command! -range=% -nargs=0 -bar Untrail keepjumps call StripWhitespace(<line1>,<line2>)
+nnoremap <silent> <leader>ww :Untrail<CR>
 
 " Source
 vnoremap <leader>S y:execute @@<cr>:echo 'Sourced selection.'<cr>