Added git submodule for vim-endwise
This commit is contained in:
parent
2ba478a674
commit
7d4784c58f
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -19,3 +19,6 @@
|
||||
[submodule "vim/.vim/bundle/pathogen"]
|
||||
path = vim/.vim/bundle/pathogen
|
||||
url = https://github.com/tpope/vim-pathogen
|
||||
[submodule "vim/.vim/bundle/endwise"]
|
||||
path = vim/.vim/bundle/endwise
|
||||
url = https://github.com/tpope/vim-endwise
|
||||
|
||||
1
vim/.vim/bundle/endwise
Submodule
1
vim/.vim/bundle/endwise
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit d5655263af8b3611a2bcb907a9963831a88d154b
|
||||
@ -1 +0,0 @@
|
||||
See the [contribution guidelines for pathogen.vim](https://github.com/tpope/vim-pathogen/blob/master/CONTRIBUTING.markdown).
|
||||
@ -1,42 +0,0 @@
|
||||
# endwise.vim
|
||||
|
||||
This is a simple plugin that helps to end certain structures
|
||||
automatically. In Ruby, this means adding `end` after `if`, `do`, `def`
|
||||
and several other keywords. In Vimscript, this amounts to appropriately
|
||||
adding `endfunction`, `endif`, etc. There's also Bourne shell, VB
|
||||
(don't ask), C/C++ preprocessor, and Lua support.
|
||||
|
||||
A primary guiding principle in designing this plugin was that an
|
||||
erroneous insertion is never acceptable. The behavior is only triggered
|
||||
once pressing enter on the end of the line. When this happens, endwise
|
||||
searches for a matching end structure and only adds one if none is
|
||||
found.
|
||||
|
||||
While the goal was to make it customizable, this turned out to be a tall
|
||||
order. Every language has vastly different requirements. Nonetheless,
|
||||
for those bold enough to attempt it, you can follow the model of the
|
||||
autocmds in the plugin to set the three magic variables governing
|
||||
endwise's behavior.
|
||||
|
||||
## Installation
|
||||
|
||||
If you don't have a preferred installation method, I recommend
|
||||
installing [pathogen.vim](https://github.com/tpope/vim-pathogen), and
|
||||
then simply copy and paste:
|
||||
|
||||
cd ~/.vim/bundle
|
||||
git clone git://github.com/tpope/vim-endwise.git
|
||||
|
||||
## Self-Promotion
|
||||
|
||||
Like endwise.vim? Follow the repository on
|
||||
[GitHub](https://github.com/tpope/vim-endwise) and vote for it on
|
||||
[vim.org](http://www.vim.org/scripts/script.php?script_id=2386). And if
|
||||
you're feeling especially charitable, follow [tpope](http://tpo.pe/) on
|
||||
[Twitter](http://twitter.com/tpope) and
|
||||
[GitHub](https://github.com/tpope).
|
||||
|
||||
## License
|
||||
|
||||
Copyright (c) Tim Pope. Distributed under the same terms as Vim itself.
|
||||
See `:help license`.
|
||||
@ -1,196 +0,0 @@
|
||||
" Location: plugin/endwise.vim
|
||||
" Author: Tim Pope <http://tpo.pe/>
|
||||
" Version: 1.2
|
||||
" 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 = 'end' |
|
||||
\ let b:endwise_words = 'function,do,then' |
|
||||
\ let b:endwise_pattern = '^\s*\zs\%(\%(local\s\+\)\=function\)\>\%(.*\<end\>\)\@!\|\<\%(then\|do\)\ze\s*$' |
|
||||
\ let b:endwise_syngroups = 'luaFunction,luaStatement,luaCond'
|
||||
autocmd FileType elixir
|
||||
\ let b:endwise_addition = 'end' |
|
||||
\ let b:endwise_words = 'do,fn' |
|
||||
\ let b:endwise_pattern = '.*[^.:@$]\zs\<\%(do\(:\)\@!\|fn\)\>\ze\%(.*[^.:@$]\<end\>\)\@!' |
|
||||
\ let b:endwise_syngroups = 'elixirBlockDefinition'
|
||||
autocmd FileType ruby
|
||||
\ let b:endwise_addition = 'end' |
|
||||
\ let b:endwise_words = 'module,class,def,if,unless,case,while,until,begin,do' |
|
||||
\ let b:endwise_pattern = '^\(.*=\)\?\s*\%(private\s\+\|protected\s\+\|public\s\+\|module_function\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 crystal
|
||||
\ let b:endwise_addition = 'end' |
|
||||
\ let b:endwise_words = 'module,class,lib,macro,struct,union,enum,def,if,unless,ifdef,case,while,until,for,begin,do' |
|
||||
\ let b:endwise_pattern = '^\(.*=\)\?\s*\%(private\s\+\|protected\s\+\|public\s\+\|abstract\s\+\)*\zs\%(module\|class\|lib\|macro\|struct\|union\|enum\|def\|if\|unless\|ifdef\|case\|while\|until\|for\|begin\)\>\%(.*[^.:@$]\<end\>\)\@!\|\<do\ze\%(\s*|.*|\)\=\s*$' |
|
||||
\ let b:endwise_syngroups = 'crystalModule,crystalClass,crystalLib,crystalMacro,crystalStruct,crystalDefine,crystalConditional,crystalRepeat,crystalControl'
|
||||
autocmd FileType sh,zsh
|
||||
\ let b:endwise_addition = '\=submatch(0)=="then" ? "fi" : submatch(0)=="case" ? "esac" : "done"' |
|
||||
\ let b:endwise_words = 'then,case,do' |
|
||||
\ let b:endwise_pattern = '\%(^\s*\zscase\>\ze\|\zs\<\%(do\|then\)\ze\s*$\)' |
|
||||
\ 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 = '\=submatch(0)=="augroup" ? submatch(0) . " END" : "end" . submatch(0)' |
|
||||
\ let b:endwise_words = 'fu,fun,func,function,wh,while,if,for,try,au,augroup' |
|
||||
\ let b:endwise_syngroups = 'vimFuncKey,vimNotFunc,vimCommand,vimAugroupKey'
|
||||
autocmd FileType c,cpp,xdefaults,haskell
|
||||
\ let b:endwise_addition = '#endif' |
|
||||
\ let b:endwise_words = 'if,ifdef,ifndef' |
|
||||
\ let b:endwise_pattern = '^\s*#\%(if\|ifdef\|ifndef\)\>' |
|
||||
\ let b:endwise_syngroups = 'cPreCondit,cPreConditMatch,cCppInWrapper,xdefaultsPreProc'
|
||||
autocmd FileType objc
|
||||
\ let b:endwise_addition = '@end' |
|
||||
\ let b:endwise_words = 'interface,implementation' |
|
||||
\ let b:endwise_pattern = '^\s*@\%(interface\|implementation\)\>' |
|
||||
\ let b:endwise_syngroups = 'objcObjDef'
|
||||
autocmd FileType matlab
|
||||
\ let b:endwise_addition = 'end' |
|
||||
\ let b:endwise_words = 'function,if,for' |
|
||||
\ let b:endwise_syngroups = 'matlabStatement,matlabFunction,matlabConditional,matlabRepeat'
|
||||
autocmd FileType htmldjango
|
||||
\ let b:endwise_addition = '{% end& %}' |
|
||||
\ let b:endwise_words = 'autoescape,block\(\s\+\S*\)\?,blocktrans,cache,comment,filter,for,if,ifchanged,ifequal,ifnotequal,language,spaceless,verbatim,with' |
|
||||
\ let b:endwise_syngroups = 'djangoTagBlock,djangoStatement'
|
||||
autocmd FileType snippets
|
||||
\ let b:endwise_addition = 'endsnippet' |
|
||||
\ let b:endwise_words = 'snippet' |
|
||||
\ let b:endwise_syngroups = 'snipSnippet,snipSnippetHeader,snipSnippetHeaderKeyword'
|
||||
autocmd FileType * call s:abbrev()
|
||||
augroup END " }}}1
|
||||
|
||||
function! s:abbrev()
|
||||
if exists('g:endwise_abbreviations')
|
||||
for word in split(get(b:, 'endwise_words', ''), ',')
|
||||
execute 'iabbrev <buffer><script>' word word.'<CR><SID>DiscretionaryEnd<Space><C-U><BS>'
|
||||
endfor
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:teardownMappings()
|
||||
inoremap <buffer> <C-X><CR> <C-X><CR>
|
||||
inoremap <buffer> <CR> <CR>
|
||||
endfunction
|
||||
|
||||
" Functions {{{1
|
||||
|
||||
function! EndwiseDiscretionary()
|
||||
return <SID>crend(0)
|
||||
endfunction
|
||||
|
||||
function! EndwiseAlways()
|
||||
return <SID>crend(1)
|
||||
endfunction
|
||||
|
||||
" }}}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 !exists('g:endwise_no_mappings')
|
||||
if maparg('<CR>','i') =~# '<C-R>=.*crend(.)<CR>\|<\%(Plug\|SNR\|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>\w\+CR'
|
||||
exe "imap <C-X><CR> ".maparg('<CR>', 'i')."<Plug>AlwaysEnd"
|
||||
exe "imap <CR> ".maparg('<CR>', 'i')."<Plug>DiscretionaryEnd"
|
||||
else
|
||||
imap <script> <C-X><CR> <CR><SID>AlwaysEnd
|
||||
imap <CR> <CR><Plug>DiscretionaryEnd
|
||||
endif
|
||||
autocmd endwise CmdwinEnter * call s:teardownMappings()
|
||||
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"
|
||||
if b:endwise_addition[0:1] ==# '\='
|
||||
let endpat = '\w\@<!'.endword.'\w\@!'
|
||||
else
|
||||
let endpat = '\w\@<!'.substitute('\w\+', '.*', b:endwise_addition, '').'\w\@!'
|
||||
endif
|
||||
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:
|
||||
Loading…
x
Reference in New Issue
Block a user