" insertlessly.vim - Waste no more time entering insert mode just to insert enters! " Author: Barry Arthur " Last Updated: 12 Feb 2012 " " See insertlessly.txt for help. This can be accessed by doing " " :helptags ~/.vim/doc " :help insertlessly " " Licensed under the same terms as Vim itself. " ============================================================================ let g:insertlessly_version = 0.5 " Exit quickly when: {{{1 " - this plugin was already loaded or disabled " - when 'compatible' is set if (exists("g:loaded_insertlessly") && g:loaded_insertlessly) || &cp finish endif let g:loaded_insertlessly = 1 " Setup {{{1 let s:cpo_save = &cpo set cpo&vim " Options if !exists('g:insertlessly_insert_newlines') let g:insertlessly_insert_newlines = 1 endif if !exists('g:insertlessly_open_newlines') let g:insertlessly_open_newlines = 1 endif if !exists('g:insertlessly_backspace_past_bol') let g:insertlessly_backspace_past_bol = 1 endif if !exists('g:insertlessly_delete_at_eol_joins') let g:insertlessly_delete_at_eol_joins = 1 endif if !exists('g:insertlessly_cleanup_all_ws') let g:insertlessly_cleanup_all_ws = 1 endif if !exists('g:insertlessly_cleanup_trailing_ws') let g:insertlessly_cleanup_trailing_ws = 1 endif if !exists('g:insertlessly_adjust_cursor') let g:insertlessly_adjust_cursor = 0 endif if !exists('g:insertlessly_insert_spaces') let g:insertlessly_insert_spaces = 1 endif " Auto Commands {{{1 augroup Insertlessly au! au InsertLeave * call Insertlessly_LeaveInsert() augroup END " Maps {{{1 nnoremap BSPastBOL :call BackspacePastBOL() nnoremap InsertNewline :call InsertNewline() nnoremap OpenNewline :call OpenNewline() nnoremap DelAtEOL :call DeleteAtEOL() nnoremap InsertSpace :call InsertSpace() if !hasmapto('InsertNewline') && g:insertlessly_insert_newlines != 0 nmap InsertNewline endif if !hasmapto('OpenNewline') && g:insertlessly_open_newlines != 0 nmap OpenNewline endif if !hasmapto('BSPastBOL') && g:insertlessly_backspace_past_bol != 0 nmap BSPastBOL endif if !hasmapto('DelAtEOL') && g:insertlessly_delete_at_eol_joins != 0 nmap DelAtEOL endif if !hasmapto('InsertSpace') && g:insertlessly_insert_spaces != 0 nmap InsertSpace endif " Functions {{{1 function! s:BackspacePastBOL() if g:insertlessly_insert_newlines != 0 let pos = getpos('.') let line = getline('.') if (pos[2] == 1) && (pos[1] > 1) if match(line, '.') != -1 normal! kJ else normal! kgJ endif else exe "normal! " . v:count1 . "X" endif else exe "normal! " . v:count1 . "X" endif endfunction function! s:getcmdwintype() if exists('*getcmdwintype') return getcmdwintype() elseif bufname('%') == '[Command Line]' return 0 else return 1 endif endfunction function! s:InsertNewline() " Special buffer types (help, quickfix, command window, etc.) have buftype set if (&buftype == "") || (&buftype == 'nofile' && s:getcmdwintype() == '') if (col('.') + 1) == col('$') exe "normal! " . v:count1 . "o" else exe "normal! " . v:count1 . "i\" endif else exe "normal! " . v:count1 . "\" endif endfunction function! s:OpenNewline() exe "normal! " . v:count1 . "o" endfunction function! s:DeleteAtEOL() if g:insertlessly_delete_at_eol_joins != 0 let eol_col = col('$') let col = col('.') let eob_line = line('$') let line = line('.') if ((col == 1) && (col == eol_col)) || (((col + 1) == eol_col) && (line != eob_line)) normal! J else exe "normal! " . v:count1 . "x" endif else exe "normal! " . v:count1 . "x" endif endfunction function! s:Insertlessly_LeaveInsert() augroup InsertlesslyCleanup au! au CursorMoved,CursorHold * call s:CleanupAllWhitespace() | call s:AdjustCursor() | au! InsertlesslyCleanup augroup END endfunction function! s:CleanupAllWhitespace() if g:insertlessly_cleanup_all_ws != 0 call insertlessly#cleanup_all_whitespace() else call s:CleanupLine() endif endfunction function! s:CleanupLine() if g:insertlessly_cleanup_trailing_ws != 0 call insertlessly#cleanup_line() endif endfunction function! s:AdjustCursor() if g:insertlessly_adjust_cursor != 0 let col = col('.') if col != 1 if col != (col('$') - 1) normal! l endif endif endif endfunction function! s:InsertSpace() silent exe "normal! " . v:count1 . "i \l" endfunction " Teardown {{{1 let &cpo = s:cpo_save " vim:set ft=vim sw=2 sts=2 et fdm=marker: