659 lines
22 KiB
VimL
659 lines
22 KiB
VimL
"=============================================================================
|
|
" FILE: init.vim
|
|
" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>
|
|
" 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
|
|
|
|
if !exists('s:is_enabled')
|
|
let s:is_enabled = 0
|
|
endif
|
|
|
|
function! neocomplete#init#enable() abort "{{{
|
|
if neocomplete#is_enabled()
|
|
return
|
|
endif
|
|
|
|
if !(has('lua') && (v:version > 703 || v:version == 703 && has('patch885')))
|
|
echomsg 'neocomplete does not work with this version of Vim.'
|
|
echomsg 'neocomplete requires Vim 7.3.885 or later with Lua support ("+lua").'
|
|
return
|
|
endif
|
|
|
|
if !exists('b:neocomplete')
|
|
call neocomplete#init#_current_neocomplete()
|
|
endif
|
|
call neocomplete#init#_autocmds()
|
|
call neocomplete#init#_others()
|
|
|
|
call neocomplete#init#_sources(get(g:neocomplete#sources,
|
|
\ neocomplete#get_context_filetype(), ['_']))
|
|
|
|
let s:is_enabled = 1
|
|
|
|
doautocmd <nomodeline> neocomplete InsertEnter
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#disable() abort "{{{
|
|
if !neocomplete#is_enabled()
|
|
return
|
|
endif
|
|
|
|
let s:is_enabled = 0
|
|
|
|
augroup neocomplete
|
|
autocmd!
|
|
augroup END
|
|
|
|
silent! delcommand NeoCompleteDisable
|
|
|
|
call neocomplete#helper#call_hook(filter(values(
|
|
\ neocomplete#variables#get_sources()), 'v:val.loaded'),
|
|
\ 'on_final', {})
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#is_enabled() abort "{{{
|
|
return s:is_enabled
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_autocmds() abort "{{{
|
|
augroup neocomplete
|
|
autocmd!
|
|
autocmd InsertEnter *
|
|
\ call neocomplete#handler#_on_insert_enter()
|
|
autocmd InsertLeave *
|
|
\ call neocomplete#handler#_on_insert_leave()
|
|
autocmd CursorMovedI *
|
|
\ call neocomplete#handler#_on_moved_i()
|
|
autocmd InsertCharPre *
|
|
\ call neocomplete#handler#_on_insert_char_pre()
|
|
autocmd TextChangedI *
|
|
\ call neocomplete#handler#_on_text_changed()
|
|
autocmd CompleteDone *
|
|
\ call neocomplete#handler#_on_complete_done()
|
|
augroup END
|
|
|
|
let event = neocomplete#util#is_text_changed() ?
|
|
\ 'TextChangedI' : 'CursorMovedI'
|
|
execute 'autocmd neocomplete' event '*'
|
|
\ 'call neocomplete#handler#_do_auto_complete("'.event.'")'
|
|
|
|
autocmd neocomplete InsertEnter *
|
|
\ call neocomplete#handler#_do_auto_complete('InsertEnter')
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_others() abort "{{{
|
|
call neocomplete#init#_variables()
|
|
|
|
call neocomplete#commands#_initialize()
|
|
|
|
" For auto complete keymappings.
|
|
call neocomplete#mappings#define_default_mappings()
|
|
|
|
" Detect set paste.
|
|
if &paste
|
|
redir => output
|
|
99verbose set paste
|
|
redir END
|
|
call neocomplete#print_error(output)
|
|
call neocomplete#print_error(
|
|
\ 'Detected set paste! Disabled neocomplete.')
|
|
endif
|
|
|
|
" Detect poor color
|
|
if &t_Co != '' && &t_Co < 8
|
|
call neocomplete#print_error(
|
|
\ 'Your terminal color is very limited. Disabled neocomplete.')
|
|
endif
|
|
|
|
command! -nargs=0 -bar NeoCompleteDisable
|
|
\ call neocomplete#init#disable()
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_variables() abort "{{{
|
|
" Initialize keyword patterns. "{{{
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'_',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#keyword_patterns',
|
|
\'filename',
|
|
\ neocomplete#util#is_windows() ?
|
|
\'\%(\a\+:/\)\?\%([/[:alnum:]()$+_~.{}\x80-\xff-]\|[^[:print:]]\|\\.\)\+' :
|
|
\'\%([/\[\][:alnum:]()$+_~.{}-]\|[^[:print:]]\|\\.\)\+')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'lisp,scheme,clojure,int-gosh,int-clisp,int-clj',
|
|
\'[[:alpha:]!$%&*+/:<=>?@\^_~\-][[:alnum:]!$%&*./:<=>?@\^_~\-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'ruby,int-irb',
|
|
\'^=\%(b\%[egin]\|e\%[nd]\)\|\%(@@\|[$@]\)\h\w*\|\h\w*\%(::\w*\)*[!?]\?')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'php,int-php',
|
|
\'</\?\%(\h[[:alnum:]_-]*\s*\)\?\%(/\?>\)\?'.
|
|
\'\|\$\h\w*\|\h\w*\%(\%(\\\|::\)\w*\)*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'perl,int-perlsh',
|
|
\'<\h\w*>\?\|[$@%&*]\h\w*\|\h\w*\%(::\w*\)*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'perl6,int-perl6',
|
|
\'<\h\w*>\?\|[$@%&][!.*?]\?\h[[:alnum:]_-]*'.
|
|
\'\|\h[[:alnum:]_-]*\%(::[[:alnum:]_-]*\)*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'pir',
|
|
\'[$@%.=]\?\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'pasm',
|
|
\'[=]\?\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'vim,help',
|
|
\'-\h[[:alnum:]-]*=\?\|\c\[:\%(\h\w*:\]\)\?\|&\h[[:alnum:]_:]*\|'.
|
|
\'<SID>\%(\h\w*\)\?\|<Plug>([^)]*)\?'.
|
|
\'\|<\h[[:alnum:]_-]*>\?\|\h[[:alnum:]_:#]*[!(]\?\|$\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'tex',
|
|
\'\\\a{\a\{1,2}}\|\\[[:alpha:]@][[:alnum:]@]*'.
|
|
\'\%({\%([[:alnum:]:_]\+\*\?}\?\)\?\)\?\|\a[[:alnum:]:_]*\*\?')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'sh,zsh,int-zsh,int-bash,int-sh',
|
|
\'[[:alpha:]_.-][[:alnum:]_.-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'vimshell',
|
|
\'\$\$\?\w*\|[[:alpha:]_.\\/~-][[:alnum:]_.\\/~-]*\|\d\+\%(\.\d\+\)\+')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'ps1,int-powershell',
|
|
\'\[\h\%([[:alnum:]_.]*\]::\)\?\|[$%@.]\?[[:alpha:]_.:-][[:alnum:]_.:-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'c',
|
|
\'^\s*#\s*\h\w*\|\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'cpp',
|
|
\'^\s*#\s*\h\w*\|\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'objc',
|
|
\'^\s*#\s*\h\w*\|\h\w*\|@\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'objcpp',
|
|
\'^\s*#\s*\h\w*\|\h\w*\|@\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'objj',
|
|
\'\h\w*\|@\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'d',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'python,int-python,int-ipython',
|
|
\'[@]\?\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'cs',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'java',
|
|
\'[@]\?\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'javascript,actionscript,int-js,int-kjs,int-rhino',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'coffee,int-coffee',
|
|
\'[@]\?\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'awk',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'haskell,int-ghci',
|
|
\'\%(\u\w*\.\)\+[[:alnum:]_'']*\|[[:alpha:]_''][[:alnum:]_'']*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'ml,ocaml,int-ocaml,int-sml,int-smlsharp',
|
|
\'[''`#.]\?\h[[:alnum:]_'']*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'erlang,int-erl',
|
|
\'^\s*-\h\w*\|\%(\h\w*:\)*\h\w*\|\h[[:alnum:]_@]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'html,xhtml,xml,markdown,mkd,eruby',
|
|
\'</\?\%([[:alnum:]_:-]\+\s*\)\?\%(/\?>\)\?\|&\h\%(\w*;\)\?'.
|
|
\'\|\h[[:alnum:]_-]*="\%([^"]*"\?\)\?\|\h[[:alnum:]_:-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'css,stylus,scss,less',
|
|
\'[@#.]\?[[:alpha:]_:-][[:alnum:]_:-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'tags',
|
|
\'^[^!][^/[:blank:]]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'pic',
|
|
\'^\s*#\h\w*\|\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'arm',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'asmh8300',
|
|
\'[[:alpha:]_.][[:alnum:]_.]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'masm',
|
|
\'\.\h\w*\|[[:alpha:]_@?$][[:alnum:]_@?$]*\|\h\w*:\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'nasm',
|
|
\'^\s*\[\h\w*\|[%.]\?\h\w*\|\%(\.\.@\?\|%[%$!]\)\%(\h\w*\)\?\|\h\w*:\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'asm',
|
|
\'[%$.]\?\h\w*\%(\$\h\w*\)\?')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'gas',
|
|
\'[$.]\?\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'gdb,int-gdb',
|
|
\'$\h\w*\|[[:alnum:]:._-]\+')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'make',
|
|
\'[[:alpha:]_.-][[:alnum:]_.-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'scala,int-scala',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'int-termtter',
|
|
\'\h[[:alnum:]_/-]*\|\$\a\+\|#\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'int-earthquake',
|
|
\'[:#$]\h\w*\|\h[[:alnum:]_/-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'dosbatch,int-cmdproxy',
|
|
\'\$\w+\|[[:alpha:]_./-][[:alnum:]_.-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'vb',
|
|
\'\h\w*\|#\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'lua',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\ 'zimbu',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'konoha',
|
|
\'[*$@%]\h\w*\|\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'cobol',
|
|
\'\a[[:alnum:]-]*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'coq',
|
|
\'\h[[:alnum:]_'']*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'tcl',
|
|
\'[.-]\h\w*\|\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'nyaos,int-nyaos',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'go',
|
|
\'\h\w*')
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#keyword_patterns',
|
|
\'toml',
|
|
\'\h[[:alnum:]_.-]*')
|
|
"}}}
|
|
|
|
" Initialize delimiter patterns. "{{{
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'vim,help', ['#'])
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'erlang,lisp,int-clisp', [':'])
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'lisp,int-clisp', ['/', ':'])
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'clojure,int-clj', ['/', '.'])
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'perl,cpp', ['::'])
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'php', ['\', '::'])
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'java,d,javascript,actionscript,'.
|
|
\ 'ruby,eruby,haskell,int-ghci,coffee,zimbu,konoha',
|
|
\ ['.'])
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'lua', ['.', ':'])
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#delimiter_patterns',
|
|
\ 'perl6', ['.', '::'])
|
|
"}}}
|
|
|
|
" Initialize text mode filetypes. "{{{
|
|
call neocomplete#util#set_default_dictionary(
|
|
\ 'g:neocomplete#text_mode_filetypes',
|
|
\ join(['hybrid', 'text', 'help', 'tex', 'gitcommit', 'gitrebase',
|
|
\ 'vcs-commit', 'markdown', 'mkd', 'textile', 'creole',
|
|
\ 'org', 'rdoc', 'mediawiki', 'rst', 'asciidoc', 'pod',
|
|
\ 'gita-commit', 'J6uil_say',
|
|
\ ], ','), 1)
|
|
"}}}
|
|
|
|
" Initialize tags filter patterns. "{{{
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#tags_filter_patterns', 'c,cpp',
|
|
\'v:val.word !~ ''^[~_]''')
|
|
"}}}
|
|
|
|
" Initialize force omni completion patterns. "{{{
|
|
call neocomplete#util#set_default_dictionary(
|
|
\'g:neocomplete#force_omni_input_patterns', 'objc',
|
|
\'\h\w\+\|[^.[:digit:] *\t]\%(\.\|->\)')
|
|
"}}}
|
|
|
|
" Must g:neocomplete#auto_completion_start_length > 1.
|
|
if g:neocomplete#auto_completion_start_length < 1
|
|
let g:neocomplete#auto_completion_start_length = 1
|
|
endif
|
|
|
|
" Must g:neocomplete#min_keyword_length > 1.
|
|
if g:neocomplete#min_keyword_length < 1
|
|
let g:neocomplete#min_keyword_length = 1
|
|
endif
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_current_neocomplete() abort "{{{
|
|
let b:neocomplete = {
|
|
\ 'context' : {
|
|
\ 'input' : '',
|
|
\ 'complete_pos' : -1,
|
|
\ 'complete_str' : '',
|
|
\ 'candidates' : [],
|
|
\ },
|
|
\ 'lock' : 0,
|
|
\ 'skip_next_complete' : 0,
|
|
\ 'filetype' : '',
|
|
\ 'context_filetype' : '',
|
|
\ 'context_filetypes' : [],
|
|
\ 'completion_length' : -1,
|
|
\ 'foldinfo' : [],
|
|
\ 'skipped' : 0,
|
|
\ 'event' : '',
|
|
\ 'cur_text' : '',
|
|
\ 'old_cur_text' : '',
|
|
\ 'old_linenr' : line('.'),
|
|
\ 'old_complete_pos' : -1,
|
|
\ 'old_char' : '',
|
|
\ 'complete_str' : '',
|
|
\ 'complete_pos' : -1,
|
|
\ 'candidates' : [],
|
|
\ 'complete_sources' : [],
|
|
\ 'manual_sources' : [],
|
|
\ 'start_time' : reltime(),
|
|
\ 'linenr' : 0,
|
|
\ 'completeopt' : &completeopt,
|
|
\ 'sources' : [],
|
|
\ 'sources_filetype' : '',
|
|
\ 'within_comment' : 0,
|
|
\ 'is_auto_complete' : 0,
|
|
\ 'indent_text' : '',
|
|
\ 'detected_foldmethod' : 0,
|
|
\ 'default_matchers' : neocomplete#init#_filters(
|
|
\ (g:neocomplete#enable_fuzzy_completion ?
|
|
\ ['matcher_fuzzy'] : ['matcher_head'])
|
|
\ + ['matcher_length']),
|
|
\}
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_sources(names) abort "{{{
|
|
if !exists('s:loaded_source_files')
|
|
" Initialize.
|
|
let s:loaded_source_files = {}
|
|
let s:loaded_all_sources = 0
|
|
let s:runtimepath_save = ''
|
|
endif
|
|
|
|
" Initialize sources table.
|
|
if s:loaded_all_sources && &runtimepath ==# s:runtimepath_save
|
|
return
|
|
endif
|
|
|
|
let runtimepath_save = neocomplete#util#split_rtp(s:runtimepath_save)
|
|
let runtimepath = neocomplete#util#join_rtp(
|
|
\ filter(neocomplete#util#split_rtp(),
|
|
\ 'index(runtimepath_save, v:val) < 0'))
|
|
let sources = neocomplete#variables#get_sources()
|
|
|
|
for name in filter(copy(a:names), '!has_key(sources, v:val)')
|
|
" Search autoload.
|
|
for source_name in map(filter(split(globpath(runtimepath,
|
|
\ 'autoload/neocomplete/sources/*.vim'), '\n'),
|
|
\ "index(g:neocomplete#ignore_source_files,
|
|
\ fnamemodify(v:val, ':t')) < 0"),
|
|
\ "fnamemodify(v:val, ':t:r')")
|
|
if has_key(s:loaded_source_files, source_name)
|
|
continue
|
|
endif
|
|
|
|
let s:loaded_source_files[source_name] = 1
|
|
|
|
let source = neocomplete#sources#{source_name}#define()
|
|
if empty(source)
|
|
" Ignore.
|
|
continue
|
|
endif
|
|
|
|
call neocomplete#define_source(source)
|
|
endfor
|
|
|
|
if name == '_'
|
|
let s:loaded_all_sources = 1
|
|
let s:runtimepath_save = &runtimepath
|
|
endif
|
|
endfor
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_source(source) abort "{{{
|
|
let default = {
|
|
\ 'is_volatile' : 0,
|
|
\ 'max_candidates' : 0,
|
|
\ 'filetypes' : {},
|
|
\ 'disabled' : 0,
|
|
\ 'disabled_filetypes' : {},
|
|
\ 'hooks' : {},
|
|
\ 'matchers' : [],
|
|
\ 'sorters' : ['sorter_rank'],
|
|
\ 'converters' : [
|
|
\ 'converter_remove_overlap',
|
|
\ 'converter_delimiter',
|
|
\ 'converter_abbr',
|
|
\ ],
|
|
\ 'keyword_patterns' : g:neocomplete#keyword_patterns,
|
|
\ 'min_pattern_length' : g:neocomplete#auto_completion_start_length,
|
|
\ 'input_pattern' : '',
|
|
\ 'neocomplete__context' : neocomplete#init#_context({}),
|
|
\ }
|
|
|
|
let source = extend(copy(default), a:source)
|
|
|
|
" Overwritten by user custom.
|
|
let custom = neocomplete#custom#get().sources
|
|
let source = extend(source, get(custom, source.name,
|
|
\ get(custom, '_', {})))
|
|
|
|
let source.loaded = 0
|
|
" Source kind convertion.
|
|
if !has_key(source, 'kind')
|
|
let source.kind = 'manual'
|
|
elseif source.kind ==# 'plugin'
|
|
let source.kind = 'keyword'
|
|
elseif source.kind ==# 'ftplugin' || source.kind ==# 'complfunc'
|
|
" For compatibility.
|
|
let source.kind = 'manual'
|
|
endif
|
|
|
|
if !has_key(source, 'rank')
|
|
" Set default rank.
|
|
let source.rank = (source.kind ==# 'keyword') ? 5 :
|
|
\ empty(source.filetypes) ? 10 : 100
|
|
endif
|
|
|
|
if !has_key(source, 'mark')
|
|
" Set default mark.
|
|
let source.mark = '[' . source.name . ']'
|
|
endif
|
|
|
|
if !has_key(source.keyword_patterns, '_')
|
|
" Set default keyword pattern.
|
|
let source.keyword_patterns['_'] =
|
|
\ get(g:neocomplete#keyword_patterns, '_', '\h\w*')
|
|
endif
|
|
|
|
let source.neocomplete__matchers = neocomplete#init#_filters(
|
|
\ neocomplete#util#convert2list(source.matchers))
|
|
let source.neocomplete__sorters = neocomplete#init#_filters(
|
|
\ neocomplete#util#convert2list(source.sorters))
|
|
let source.neocomplete__converters = neocomplete#init#_filters(
|
|
\ neocomplete#util#convert2list(source.converters))
|
|
|
|
let source.neocomplete__context.source_name = source.name
|
|
|
|
return source
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_filters(names) abort "{{{
|
|
let _ = []
|
|
let filters = neocomplete#variables#get_filters()
|
|
|
|
for name in a:names
|
|
if !has_key(filters, name)
|
|
" Search autoload.
|
|
for filter_name in map(split(globpath(&runtimepath,
|
|
\ 'autoload/neocomplete/filters/'.
|
|
\ substitute(name,
|
|
\'^\%(matcher\|sorter\|converter\)_[^/_-]\+\zs[/_-].*$', '', '')
|
|
\ .'*.vim'), '\n'), "fnamemodify(v:val, ':t:r')")
|
|
let filter = neocomplete#filters#{filter_name}#define()
|
|
if empty(filter)
|
|
" Ignore.
|
|
continue
|
|
endif
|
|
|
|
call neocomplete#define_filter(filter)
|
|
endfor
|
|
|
|
if !has_key(filters, name)
|
|
" Not found.
|
|
call neocomplete#print_error(
|
|
\ printf('filter name : %s is not found.', string(name)))
|
|
continue
|
|
endif
|
|
endif
|
|
|
|
if has_key(filters, name)
|
|
call add(_, filters[name])
|
|
endif
|
|
endfor
|
|
|
|
return _
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_filter(filter) abort "{{{
|
|
let default = {
|
|
\ }
|
|
|
|
let filter = extend(default, a:filter)
|
|
if !has_key(filter, 'kind')
|
|
let filter.kind =
|
|
\ (filter.name =~# '^matcher_') ? 'matcher' :
|
|
\ (filter.name =~# '^sorter_') ? 'sorter' : 'converter'
|
|
endif
|
|
|
|
return filter
|
|
endfunction"}}}
|
|
|
|
function! neocomplete#init#_context(context) abort "{{{
|
|
let filetype = neocomplete#get_context_filetype()
|
|
return extend(a:context, {
|
|
\ 'input' : '',
|
|
\ 'prev_complete_pos' : -1,
|
|
\ 'prev_candidates' : [],
|
|
\ 'prev_line' : '',
|
|
\ 'complete_pos' : -1,
|
|
\ 'complete_str' : '',
|
|
\ 'candidates' : [],
|
|
\ 'filetype' : filetype,
|
|
\ 'filetypes' : neocomplete#context_filetype#filetypes(),
|
|
\ })
|
|
endfunction"}}}
|
|
|
|
let &cpo = s:save_cpo
|
|
unlet s:save_cpo
|
|
|
|
" vim: foldmethod=marker
|