1 " default filetypes 2 if !exists('g:auto_save_filetypes') 3 let g:auto_save_filetypes = [ 'markdown', 'text' ] 4 endif 5 6 if !exists('g:auto_save_all_filetypes') 7 let g:auto_save_all_filetypes = 0 8 endif 9 10 let s:auto_save_filetype_enabled = 0 11 let s:auto_save_write = 0 12 13 function s:auto_save() 14 if s:auto_save_filetype_enabled == 1 || g:auto_save_all_filetypes == 1 15 if s:auto_save_write == 1 16 let s:auto_save_write = 0 17 let l:filename = expand('%') 18 if &modified && l:filename != "" 19 let l:bytes = line2byte('$') + len(getline('$')) 20 let l:home = expand('$HOME') 21 let l:newfile = filereadable(l:filename) ? "" : "[New] " 22 23 if l:filename =~ '^' . l:home 24 let l:rel_filename = substitute(l:filename, l:home, '~', '') 25 else 26 let l:rel_filename = l:filename 27 endif 28 29 silent! write 30 let l:echo_msg = "\"" .. rel_filename .. "\" " .. l:newfile 31 \ .. line('$') .. "L, " .. l:bytes .. "B written [autosave]" 32 33 let l:echo_msg_len = len(l:echo_msg) 34 if (v:echospace - l:echo_msg_len) < 0 35 let l:echo_msg = l:echo_msg[l:echo_msg_len - v:echospace + 1: l:echo_msg_len] 36 let l:echo_msg = substitute(l:echo_msg, '^.', '<', '') 37 endif 38 39 echo l:echo_msg 40 endif 41 endif 42 endif 43 endfunction 44 45 function s:autosave_current_buffer_enable() 46 let s:auto_save_filetype_enabled = 1 47 au TextChanged,TextChangedI <buffer> silent! let s:auto_save_write = 1 48 au CursorHold,CursorHoldI <buffer> call s:auto_save() 49 endfunction 50 51 if g:auto_save_all_filetypes == 0 52 au BufEnter,FileType * if index(g:auto_save_filetypes, &filetype) !=# -1 | 53 \ call s:autosave_current_buffer_enable() | endif 54 else 55 au BufEnter,FileType * call s:autosave_current_buffer_enable() 56 endif
