diff options
Diffstat (limited to 'vim/plugin/endwise.vim')
| -rw-r--r-- | vim/plugin/endwise.vim | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/vim/plugin/endwise.vim b/vim/plugin/endwise.vim deleted file mode 100644 index dca90ff..0000000 --- a/vim/plugin/endwise.vim +++ /dev/null @@ -1,134 +0,0 @@ -" endwise.vim - EndWise -" Author: Tim Pope <http://tpo.pe/> -" Version: 1.0 -" License: Same as Vim itself. See :help license -" GetLatestVimScripts: 2386 1 :AutoInstall: endwise.vim - -if exists("g:loaded_endwise") || &cp - finish -endif -let g:loaded_endwise = 1 - -augroup endwise " {{{1 - autocmd! - autocmd FileType lua - \ let b:endwise_addition = '\=submatch(0)=="{" ? "}" : "end"' | - \ let b:endwise_words = 'function,do,then' | - \ let b:endwise_pattern = '^\s*\zs\%(function\|do\|then\)\>\%(.*[^.:@$]\<end\>\)\@!\|\<then\|do\ze\%(\s*|.*|\)\=\s*$' | - \ let b:endwise_syngroups = 'luaFunction,luaStatement,luaCond' - autocmd FileType ruby - \ let b:endwise_addition = '\=submatch(0)=="{" ? "}" : "end"' | - \ let b:endwise_words = 'module,class,def,if,unless,case,while,until,begin,do' | - \ let b:endwise_pattern = '^\s*\zs\%(module\|class\|def\|if\|unless\|case\|while\|until\|for\|\|begin\)\>\%(.*[^.:@$]\<end\>\)\@!\|\<do\ze\%(\s*|.*|\)\=\s*$' | - \ let b:endwise_syngroups = 'rubyModule,rubyClass,rubyDefine,rubyControl,rubyConditional,rubyRepeat' - autocmd FileType sh,zsh - \ let b:endwise_addition = '\=submatch(0)=="if" ? "fi" : submatch(0)=="case" ? "esac" : "done"' | - \ let b:endwise_words = 'if,until,case,do' | - \ let b:endwise_pattern = '\%(^\s*\zs\%(if\|case\)\>\ze\|\zs\<do\ze$\|^\s*\zsdo\s*\ze$\)' | - \ let b:endwise_syngroups = 'shConditional,shLoop,shIf,shFor,shRepeat,shCaseEsac,zshConditional,zshRepeat,zshDelimiter' - autocmd FileType vb,vbnet,aspvbs - \ let b:endwise_addition = 'End &' | - \ let b:endwise_words = 'Function,Sub,Class,Module,Enum,Namespace' | - \ let b:endwise_pattern = '\%(\<End\>.*\)\@<!\<&\>' | - \ let b:endwise_syngroups = 'vbStatement,vbnetStorage,vbnetProcedure,vbnet.*Words,AspVBSStatement' - autocmd FileType vim - \ let b:endwise_addition = 'end&' | - \ let b:endwise_words = 'fu\%[nction],wh\%[ile],if,for,try' | - \ let b:endwise_syngroups = 'vimFuncKey,vimNotFunc,vimCommand' -augroup END " }}}1 - -" Maps {{{1 - -if maparg("<Plug>DiscretionaryEnd") == "" - inoremap <silent> <SID>DiscretionaryEnd <C-R>=<SID>crend(0)<CR> - inoremap <silent> <SID>AlwaysEnd <C-R>=<SID>crend(1)<CR> - imap <script> <Plug>DiscretionaryEnd <SID>DiscretionaryEnd - imap <script> <Plug>AlwaysEnd <SID>AlwaysEnd -endif -if maparg('<CR>','i') =~# '<C-R>=.*crend(.)<CR>\|<\%(Plug\|SID\)>.*End' - " Already mapped -elseif maparg('<CR>','i') =~ '<CR>' - exe "imap <script> <C-X><CR> ".maparg('<CR>','i')."<SID>AlwaysEnd" - exe "imap <script> <CR> ".maparg('<CR>','i')."<SID>DiscretionaryEnd" -elseif maparg('<CR>','i') =~ '<Plug>delimitMateCR' - exe "imap <C-X><CR> ".maparg('<CR>', 'i')."<Plug>AlwaysEnd" - exe "imap <CR> ".maparg('<CR>', 'i')."<Plug>DiscretionaryEnd" -else - imap <C-X><CR> <CR><Plug>AlwaysEnd - imap <CR> <CR><Plug>DiscretionaryEnd -endif - -if maparg('<M-o>','i') == '' - inoremap <M-o> <C-O>o -endif - -" }}}1 - -" Code {{{1 - -function! s:mysearchpair(beginpat,endpat,synpat) - let g:endwise_syntaxes = "" - let s:lastline = line('.') - call s:synname() - let line = searchpair(a:beginpat,'',a:endpat,'Wn','<SID>synname() !~# "^'.substitute(a:synpat,'\\','\\\\','g').'$"',line('.')+50) - return line -endfunction - -function! s:crend(always) - let n = "" - if !exists("b:endwise_addition") || !exists("b:endwise_words") || !exists("b:endwise_syngroups") - return n - end - let synpat = '\%('.substitute(b:endwise_syngroups,',','\\|','g').'\)' - let wordchoice = '\%('.substitute(b:endwise_words,',','\\|','g').'\)' - if exists("b:endwise_pattern") - let beginpat = substitute(b:endwise_pattern,'&',substitute(wordchoice,'\\','\\&','g'),'g') - else - let beginpat = '\<'.wordchoice.'\>' - endif - let lnum = line('.') - 1 - let space = matchstr(getline(lnum),'^\s*') - let col = match(getline(lnum),beginpat) + 1 - let word = matchstr(getline(lnum),beginpat) - let endword = substitute(word,'.*',b:endwise_addition,'') - let y = n.endword."\<C-O>O" - let endpat = '\<'.endword.'\>' - if a:always - return y - elseif col <= 0 || synIDattr(synID(lnum,col,1),'name') !~ '^'.synpat.'$' - return n - elseif getline('.') !~ '^\s*#\=$' - return n - endif - let line = s:mysearchpair(beginpat,endpat,synpat) - " even is false if no end was found, or if the end found was less - " indented than the current line - let even = strlen(matchstr(getline(line),'^\s*')) >= strlen(space) - if line == 0 - let even = 0 - endif - if !even && line == line('.') + 1 - return y - endif - if even - return n - endif - return y -endfunction - -function! s:synname() - " Checking this helps to force things to stay in sync - while s:lastline < line('.') - let s = synIDattr(synID(s:lastline,indent(s:lastline)+1,1),'name') - let s:lastline = nextnonblank(s:lastline + 1) - endwhile - - let s = synIDattr(synID(line('.'),col('.'),1),'name') - let g:endwise_syntaxes = g:endwise_syntaxes . line('.').','.col('.')."=".s."\n" - let s:lastline = line('.') - return s -endfunction - -" }}}1 - -" vim:set sw=2 sts=2: |