]> git.rmz.io Git - dotfiles.git/blobdiff - vim/vimrc
vim: don't jump when stripping whitespace
[dotfiles.git] / vim / vimrc
index 9303fc47d24442ff354b29fc8fa093faa3c5cef3..5a271cb86229d480bb200d30c72ef9faf362d8b7 100644 (file)
--- a/vim/vimrc
+++ b/vim/vimrc
@@ -266,6 +266,8 @@ set viminfo='100,<50,s10,h,n$XDG_CACHE_HOME/vim/viminfo " viminfo defaults but s
 
 set viewdir=$XDG_CACHE_HOME/vim/view//
 
+set sessionoptions+=unix,slash  " damn windows and it's silly ways
+
 " autocmds {{{1
 " Resize splits when the window is resized {{{2
 augroup resize
@@ -297,6 +299,24 @@ augroup cursor_pos
                 \ endif
 augroup END
 
+" Check for file modifications automatically {{{2
+" (current buffer only)
+" Use :NoAutoChecktime to disable it (uses b:autochecktime)
+fun! MyAutoCheckTime()
+  " only check timestamp for normal files
+  if &buftype != '' | return | endif
+  if ! exists('b:autochecktime') || b:autochecktime
+    checktime %
+    let b:autochecktime = 1
+  endif
+endfun
+augroup MyAutoChecktime
+  au!
+  au FocusGained,BufEnter,CursorHold,InsertEnter * call MyAutoCheckTime()
+augroup END
+command! NoAutoChecktime let b:autochecktime=0
+command! ToggleAutoChecktime let b:autochecktime=!get(b:, 'autochecktime', 0) | echom "b:autochecktime:" b:autochecktime
+
 " bindings {{{1
 
 " allow both <space> and / to be <leader>
@@ -318,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>