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
\ 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>
" 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>