"============================================================================= " FILE: autoload.vim " AUTHOR: Shougo Matsushita " License: MIT license {{{ " Permission is hereby granted, free of charge, to any person obtaining " a copy of this software and associated documentation files (the " "Software"), to deal in the Software without restriction, including " without limitation the rights to use, copy, modify, merge, publish, " distribute, sublicense, and/or sell copies of the Software, and to " permit persons to whom the Software is furnished to do so, subject to " the following conditions: " " The above copyright notice and this permission notice shall be included " in all copies or substantial portions of the Software. " " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS " OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF " MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. " IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY " CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, " TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE " SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. " }}} "============================================================================= let s:save_cpo = &cpo set cpo&vim function! neobundle#autoload#init() abort "{{{ let s:active_auto_source = 0 let s:loaded_path = 0 augroup neobundle autocmd FileType * \ call s:on_filetype() autocmd FuncUndefined * \ call s:on_function() autocmd InsertEnter * \ call s:on_insert() augroup END if has('patch-7.4.414') autocmd neobundle CmdUndefined * \ call s:on_command_prefix() endif augroup neobundle-path autocmd! augroup END for event in [ \ 'BufRead', 'BufCreate', 'BufEnter', \ 'BufWinEnter', 'BufNew', 'VimEnter', 'BufNewFile' \ ] execute 'autocmd neobundle-path' event \ "* call s:on_path(expand(''), ".string(event) . ")" endfor augroup neobundle-focus autocmd! autocmd CursorHold * if s:active_auto_source \ | call s:source_focus() \ | endif autocmd FocusLost * let s:active_auto_source = 1 | call s:source_focus() autocmd FocusGained * let s:active_auto_source = 0 augroup END endfunction"}}} function! neobundle#autoload#_command(command, name, args, bang, line1, line2) abort "{{{ call neobundle#config#source(a:name) if !exists(':' . a:command) call neobundle#util#print_error( \ printf('command %s is not found.', a:command)) return endif let range = (a:line1 == a:line2) ? '' : \ (a:line1==line("'<") && a:line2==line("'>")) ? \ "'<,'>" : a:line1.",".a:line2 try execute range.a:command.a:bang a:args catch /^Vim\%((\a\+)\)\=:E481/ " E481: No range allowed execute a:command.a:bang a:args endtry endfunction"}}} function! neobundle#autoload#_command_dummy_complete(arglead, cmdline, cursorpos) abort "{{{ " Load plugins let command = tolower(matchstr(a:cmdline, '\a\S*')) let bundles = filter(neobundle#config#get_autoload_bundles(), \ "!empty(filter(map(copy(v:val.pre_cmd), 'tolower(v:val)'), \ 'stridx(command, v:val) == 0'))") call neobundle#config#source_bundles(bundles) " Print the candidates call feedkeys("\", 'n') return [''] endfunction"}}} function! neobundle#autoload#_mapping(mapping, name, mode) abort "{{{ let cnt = v:count > 0 ? v:count : '' let input = s:get_input() call neobundle#config#source(a:name) if a:mode ==# 'v' || a:mode ==# 'x' call feedkeys('gv', 'n') elseif a:mode ==# 'o' " TODO: omap " v:prevcount? " Cancel waiting operator mode. call feedkeys(v:operator, 'm') endif call feedkeys(cnt, 'n') let mapping = a:mapping while mapping =~ '<[[:alnum:]-]\+>' let mapping = substitute(mapping, '\c', \ get(g:, 'mapleader', '\'), 'g') let mapping = substitute(mapping, '\c', \ get(g:, 'maplocalleader', '\'), 'g') let ctrl = matchstr(mapping, '<\zs[[:alnum:]-]\+\ze>') execute 'let mapping = substitute( \ mapping, "<' . ctrl . '>", "\<' . ctrl . '>", "")' endwhile call feedkeys(mapping . input, 'm') return '' endfunction"}}} function! neobundle#autoload#_source(bundle_name) abort "{{{ let bundles = filter(neobundle#config#get_autoload_bundles(), \ "index(v:val.on_source, a:bundle_name) >= 0") if !empty(bundles) call neobundle#config#source_bundles(bundles) endif endfunction"}}} function! neobundle#autoload#_set_function_prefixes(bundles) abort "{{{ for bundle in filter(copy(a:bundles), "empty(v:val.pre_func)") let bundle.pre_func = \ neobundle#util#uniq(map(split(globpath( \ bundle.path, 'autoload/**/*.vim', 1), "\n"), \ "substitute(matchstr( \ neobundle#util#substitute_path_separator( \ fnamemodify(v:val, ':r')), \ '/autoload/\\zs.*$'), '/', '#', 'g').'#'")) endfor endfunction"}}} function! s:on_filetype() abort "{{{ let bundles = filter(neobundle#config#get_autoload_bundles(), \ "!empty(v:val.on_ft)") for filetype in add(neobundle#util#get_filetypes(), 'all') call neobundle#config#source_bundles(filter(copy(bundles)," \ index(v:val.on_ft, filetype) >= 0")) endfor endfunction"}}} function! s:on_insert() abort "{{{ let bundles = filter(neobundle#config#get_autoload_bundles(), \ "v:val.on_i") if !empty(bundles) call neobundle#config#source_bundles(bundles) doautocmd InsertEnter endif endfunction"}}} function! s:on_function() abort "{{{ let function = expand('') let function_prefix = substitute(function, '[^#]*$', '', '') if function_prefix =~# '^neobundle#' \ || function_prefix ==# 'vital#' \ || has('vim_starting') return endif let bundles = neobundle#config#get_autoload_bundles() call neobundle#autoload#_set_function_prefixes(bundles) let bundles = filter(bundles, \ "index(v:val.pre_func, function_prefix) >= 0 \ || (index(v:val.on_func, function) >= 0)") call neobundle#config#source_bundles(bundles) endfunction"}}} function! s:on_command_prefix() abort "{{{ let command = tolower(expand('')) let bundles = filter(neobundle#config#get_autoload_bundles(), \ "!empty(filter(map(copy(v:val.pre_cmd), 'tolower(v:val)'), \ 'stridx(command, v:val) == 0'))") call neobundle#config#source_bundles(bundles) endfunction"}}} function! s:on_path(path, event) abort "{{{ if a:path == '' return endif let path = a:path " For ":edit ~". if fnamemodify(path, ':t') ==# '~' let path = '~' endif let path = neobundle#util#expand(path) let bundles = filter(neobundle#config#get_autoload_bundles(), \ "len(filter(copy(v:val.on_path), \ 'path =~? v:val')) > 0")") if !empty(bundles) call neobundle#config#source_bundles(bundles) execute 'doautocmd' a:event if !s:loaded_path && has('vim_starting') \ && neobundle#util#redir('filetype') =~# 'detection:ON' " Force enable auto detection if path bundles are loaded autocmd neobundle VimEnter * filetype detect endif let s:loaded_path = 1 endif endfunction"}}} function! s:source_focus() abort "{{{ let bundles = neobundle#util#sort_by(filter( \ neobundle#config#get_autoload_bundles(), \ "v:val.focus > 0"), 'v:val.focus') if empty(bundles) augroup neobundle-focus autocmd! augroup END return endif call neobundle#config#source_bundles([bundles[0]]) call feedkeys("g\", 'n') endfunction"}}} function! s:get_input() abort "{{{ let input = '' let termstr = "" call feedkeys(termstr, 'n') let type_num = type(0) while 1 let char = getchar() let input .= (type(char) == type_num) ? nr2char(char) : char let idx = stridx(input, termstr) if idx >= 1 let input = input[: idx - 1] break elseif idx == 0 let input = '' break endif endwhile return input endfunction"}}} function! s:get_lazy_bundles() abort "{{{ return filter(neobundle#config#get_neobundles(), \ "!v:val.sourced && v:val.rtp != '' && v:val.lazy") endfunction"}}} let &cpo = s:save_cpo unlet s:save_cpo