123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656 |
- "=============================================================================
- " 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*[!?]\?')
- call neocomplete#util#set_default_dictionary(
- \'g:neocomplete#keyword_patterns',
- \'php,int-php',
- \'</\?\%(\h[[:alnum:]_-]*\s*\)\?\%(/\?>\)\?\|\$\h\w*\|\h\w*')
- call neocomplete#util#set_default_dictionary(
- \'g:neocomplete#keyword_patterns',
- \'perl,int-perlsh',
- \'<\h\w*>\?\|[$@%&*]\h\w*\|\h\w*')
- call neocomplete#util#set_default_dictionary(
- \'g:neocomplete#keyword_patterns',
- \'perl6,int-perl6',
- \'<\h\w*>\?\|[$@%&][!.*?]\?\h[[:alnum:]_-]*\|\h[[: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_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
|