dotvim/.vim/bundle/neocomplete.vim/autoload/neocomplete.vim
2015-09-23 13:33:15 +02:00

353 lines
13 KiB
VimL

"=============================================================================
" FILE: neocomplete.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.
" }}}
"=============================================================================
if !exists('g:loaded_neocomplete')
runtime! plugin/neocomplete.vim
endif
let s:save_cpo = &cpo
set cpo&vim
" Global options definition. "{{{
let g:neocomplete#max_list =
\ get(g:, 'neocomplete#max_list', 100)
let g:neocomplete#max_keyword_width =
\ get(g:, 'neocomplete#max_keyword_width', 80)
let g:neocomplete#auto_completion_start_length =
\ get(g:, 'neocomplete#auto_completion_start_length', 2)
let g:neocomplete#manual_completion_start_length =
\ get(g:, 'neocomplete#manual_completion_start_length', 0)
let g:neocomplete#min_keyword_length =
\ get(g:, 'neocomplete#min_keyword_length', 4)
let g:neocomplete#enable_ignore_case =
\ get(g:, 'neocomplete#enable_ignore_case', &ignorecase)
let g:neocomplete#enable_smart_case =
\ get(g:, 'neocomplete#enable_smart_case', &infercase)
let g:neocomplete#enable_camel_case =
\ get(g:, 'neocomplete#enable_camel_case', 0)
let g:neocomplete#disable_auto_complete =
\ get(g:, 'neocomplete#disable_auto_complete', 0)
let g:neocomplete#enable_fuzzy_completion =
\ get(g:, 'neocomplete#enable_fuzzy_completion', 1)
let g:neocomplete#enable_insert_char_pre =
\ get(g:, 'neocomplete#enable_insert_char_pre', 0)
let g:neocomplete#enable_cursor_hold_i =
\ get(g:, 'neocomplete#enable_cursor_hold_i', 0)
let g:neocomplete#cursor_hold_i_time =
\ get(g:, 'neocomplete#cursor_hold_i_time', 300)
let g:neocomplete#enable_auto_select =
\ get(g:, 'neocomplete#enable_auto_select', 0)
let g:neocomplete#enable_auto_delimiter =
\ get(g:, 'neocomplete#enable_auto_delimiter', 0)
let g:neocomplete#lock_buffer_name_pattern =
\ get(g:, 'neocomplete#lock_buffer_name_pattern', '')
let g:neocomplete#ctags_command =
\ get(g:, 'neocomplete#ctags_command', 'ctags')
let g:neocomplete#lock_iminsert =
\ get(g:, 'neocomplete#lock_iminsert', 0)
let g:neocomplete#enable_multibyte_completion =
\ get(g:, 'neocomplete#enable_multibyte_completion', 0)
let g:neocomplete#release_cache_time =
\ get(g:, 'neocomplete#release_cache_time', 900)
let g:neocomplete#skip_auto_completion_time =
\ get(g:, 'neocomplete#skip_auto_completion_time', '0.3')
let g:neocomplete#enable_auto_close_preview =
\ get(g:, 'neocomplete#enable_auto_close_preview', 0)
let g:neocomplete#fallback_mappings =
\ get(g:, 'neocomplete#fallback_mappings', [])
let g:neocomplete#sources =
\ get(g:, 'neocomplete#sources', {})
let g:neocomplete#keyword_patterns =
\ get(g:, 'neocomplete#keyword_patterns', {})
let g:neocomplete#same_filetypes =
\ get(g:, 'neocomplete#same_filetypes', {})
let g:neocomplete#delimiter_patterns =
\ get(g:, 'neocomplete#delimiter_patterns', {})
let g:neocomplete#ctags_arguments =
\ get(g:, 'neocomplete#ctags_arguments', {})
let g:neocomplete#text_mode_filetypes =
\ get(g:, 'neocomplete#text_mode_filetypes', {})
let g:neocomplete#tags_filter_patterns =
\ get(g:, 'neocomplete#tags_filter_patterns', {})
let g:neocomplete#force_omni_input_patterns =
\ get(g:, 'neocomplete#force_omni_input_patterns', {})
let g:neocomplete#ignore_composite_filetypes =
\ get(g:, 'neocomplete#ignore_composite_filetypes', {})
let g:neocomplete#ignore_source_files =
\ get(g:, 'neocomplete#ignore_source_files', [])
"}}}
function! neocomplete#initialize() "{{{
return neocomplete#init#enable()
endfunction"}}}
function! neocomplete#get_current_neocomplete() "{{{
if !exists('b:neocomplete')
call neocomplete#init#_current_neocomplete()
endif
return b:neocomplete
endfunction"}}}
function! neocomplete#get_context() "{{{
return neocomplete#get_current_neocomplete().context
endfunction"}}}
" Source helper. "{{{
function! neocomplete#define_source(source) "{{{
let sources = neocomplete#variables#get_sources()
for source in neocomplete#util#convert2list(a:source)
let source = neocomplete#init#_source(source)
if !source.disabled
let sources[source.name] = source
endif
endfor
endfunction"}}}
function! neocomplete#define_filter(filter) "{{{
let filters = neocomplete#variables#get_filters()
for filter in neocomplete#util#convert2list(a:filter)
let filters[filter.name] = neocomplete#init#_filter(filter)
endfor
endfunction"}}}
function! neocomplete#available_sources() "{{{
return copy(neocomplete#variables#get_sources())
endfunction"}}}
function! neocomplete#custom_source(source_name, option_name, value) "{{{
return neocomplete#custom#source(a:source_name, a:option_name, a:value)
endfunction"}}}
function! neocomplete#dup_filter(list) "{{{
return neocomplete#util#dup_filter(a:list)
endfunction"}}}
function! neocomplete#system(...) "{{{
return call('neocomplete#util#system', a:000)
endfunction"}}}
function! neocomplete#has_vimproc() "{{{
return neocomplete#util#has_vimproc()
endfunction"}}}
function! neocomplete#get_cur_text(...) "{{{
" Return cached text.
let neocomplete = neocomplete#get_current_neocomplete()
return (a:0 == 0 && mode() ==# 'i' &&
\ neocomplete.cur_text != '') ?
\ neocomplete.cur_text : neocomplete#helper#get_cur_text()
endfunction"}}}
function! neocomplete#get_keyword_pattern(...) "{{{
let filetype = a:0 != 0? a:1 : neocomplete#get_context_filetype()
if a:0 < 2
return neocomplete#helper#unite_patterns(
\ g:neocomplete#keyword_patterns, filetype)
endif
let source = neocomplete#variables#get_source(a:2)
if !has_key(source, 'neocomplete__keyword_patterns')
let source.neocomplete__keyword_patterns = {}
endif
if !has_key(source.neocomplete__keyword_patterns, filetype)
let source.neocomplete__keyword_patterns[filetype] =
\ neocomplete#helper#unite_patterns(
\ source.keyword_patterns, filetype)
endif
return source.neocomplete__keyword_patterns[filetype]
endfunction"}}}
function! neocomplete#get_keyword_pattern_end(...) "{{{
return '\%('.call('neocomplete#get_keyword_pattern', a:000).'\m\)$'
endfunction"}}}
function! neocomplete#match_word(...) "{{{
return call('neocomplete#helper#match_word', a:000)
endfunction"}}}
function! neocomplete#is_enabled() "{{{
return neocomplete#init#is_enabled()
endfunction"}}}
function! neocomplete#is_locked(...) "{{{
return neocomplete#is_cache_disabled() || &paste
\ || (&t_Co != '' && &t_Co < 8)
\ || g:neocomplete#disable_auto_complete
endfunction"}}}
function! neocomplete#is_cache_disabled() "{{{
let ignore_filetypes = ['fuf', 'ku']
let bufnr = a:0 > 0 ? a:1 : bufnr('%')
return !neocomplete#is_enabled()
\ || index(ignore_filetypes, &filetype) >= 0
\ || neocomplete#get_current_neocomplete().lock
\ || (g:neocomplete#lock_buffer_name_pattern != '' &&
\ bufname(bufnr) =~ g:neocomplete#lock_buffer_name_pattern)
endfunction"}}}
function! neocomplete#is_auto_select() "{{{
return g:neocomplete#enable_auto_select && !neocomplete#is_eskk_enabled()
endfunction"}}}
function! neocomplete#is_auto_complete() "{{{
let neocomplete = neocomplete#get_current_neocomplete()
return neocomplete.is_auto_complete
endfunction"}}}
function! neocomplete#is_eskk_enabled() "{{{
return exists('*eskk#is_enabled') && eskk#is_enabled()
endfunction"}}}
function! neocomplete#is_eskk_convertion(cur_text) "{{{
return neocomplete#is_eskk_enabled()
\ && eskk#get_preedit().get_henkan_phase() !=#
\ g:eskk#preedit#PHASE_NORMAL
endfunction"}}}
function! neocomplete#is_multibyte_input(cur_text) "{{{
return (exists('b:skk_on') && b:skk_on)
\ || (!g:neocomplete#enable_multibyte_completion
\ && char2nr(split(a:cur_text, '\zs')[-1]) > 0x80)
endfunction"}}}
function! neocomplete#is_text_mode() "{{{
let neocomplete = neocomplete#get_current_neocomplete()
return get(g:neocomplete#text_mode_filetypes,
\ neocomplete.context_filetype, 0)
endfunction"}}}
function! neocomplete#is_windows() "{{{
return neocomplete#util#is_windows()
endfunction"}}}
function! neocomplete#is_prefetch() "{{{
return 1
endfunction"}}}
function! neocomplete#exists_echodoc() "{{{
return exists('g:loaded_echodoc') && g:loaded_echodoc
endfunction"}}}
function! neocomplete#within_comment() "{{{
return neocomplete#get_current_neocomplete().within_comment
endfunction"}}}
function! neocomplete#print_error(string) "{{{
echohl Error | echomsg '[neocomplete] ' . a:string | echohl None
endfunction"}}}
function! neocomplete#print_warning(string) "{{{
echohl WarningMsg | echomsg '[neocomplete] ' . a:string | echohl None
endfunction"}}}
function! neocomplete#head_match(checkstr, headstr) "{{{
let checkstr = &ignorecase ?
\ tolower(a:checkstr) : a:checkstr
let headstr = &ignorecase ?
\ tolower(a:headstr) : a:headstr
return stridx(checkstr, headstr) == 0
endfunction"}}}
function! neocomplete#get_source_filetypes(filetype) "{{{
return neocomplete#helper#get_source_filetypes(a:filetype)
endfunction"}}}
function! neocomplete#escape_match(str) "{{{
return escape(a:str, '~"*\.^$[]')
endfunction"}}}
function! neocomplete#get_context_filetype(...) "{{{
let neocomplete = exists('b:neocomplete') ?
\ b:neocomplete : neocomplete#get_current_neocomplete()
if a:0 != 0 || mode() !=# 'i' ||
\ neocomplete.context_filetype == ''
call neocomplete#context_filetype#set()
endif
return neocomplete.context_filetype
endfunction"}}}
function! neocomplete#get_context_filetype_range(...) "{{{
if !neocomplete#is_enabled()
return [[1, 1], [line('$'), len(getline('$'))+1]]
endif
let neocomplete = neocomplete#get_current_neocomplete()
if a:0 != 0 || mode() !=# 'i' ||
\ neocomplete.context_filetype == ''
call neocomplete#context_filetype#set()
endif
if neocomplete.context_filetype ==# &filetype
return [[1, 1], [line('$'), len(getline('$'))+1]]
endif
return neocomplete.context_filetype_range
endfunction"}}}
function! neocomplete#print_debug(expr) "{{{
if g:neocomplete#enable_debug
echomsg string(a:expr)
endif
endfunction"}}}
function! neocomplete#get_data_directory() "{{{
let g:neocomplete#data_directory =
\ get(g:, 'neocomplete#data_directory',
\ ($XDG_CACHE_HOME != '' ?
\ $XDG_CACHE_HOME . '/neocomplete' : '~/.cache/neocomplete'))
let directory = neocomplete#util#substitute_path_separator(
\ neocomplete#util#expand(g:neocomplete#data_directory))
if !isdirectory(directory)
if neocomplete#util#is_sudo()
call neocomplete#print_error(printf(
\ 'Cannot create Directory "%s" in sudo session.', directory))
else
call mkdir(directory, 'p')
endif
endif
return directory
endfunction"}}}
function! neocomplete#complete_check() "{{{
return neocomplete#helper#complete_check()
endfunction"}}}
function! neocomplete#skip_next_complete() "{{{
let neocomplete = neocomplete#get_current_neocomplete()
let neocomplete.skip_next_complete = 1
endfunction"}}}
function! neocomplete#set_dictionary_helper(variable, keys, value) "{{{
return neocomplete#util#set_dictionary_helper(
\ a:variable, a:keys, a:value)
endfunction"}}}
function! neocomplete#disable_default_dictionary(variable) "{{{
return neocomplete#util#disable_default_dictionary(a:variable)
endfunction"}}}
function! neocomplete#filetype_complete(arglead, cmdline, cursorpos) "{{{
return neocomplete#helper#filetype_complete(a:arglead, a:cmdline, a:cursorpos)
endfunction"}}}
"}}}
" Key mapping functions. "{{{
function! neocomplete#smart_close_popup()
return neocomplete#mappings#smart_close_popup()
endfunction
function! neocomplete#close_popup()
return neocomplete#mappings#close_popup()
endfunction
function! neocomplete#cancel_popup()
return neocomplete#mappings#cancel_popup()
endfunction
function! neocomplete#undo_completion()
return neocomplete#mappings#undo_completion()
endfunction
function! neocomplete#complete_common_string()
return neocomplete#mappings#complete_common_string()
endfunction
function! neocomplete#start_manual_complete(...)
return call('neocomplete#mappings#start_manual_complete', a:000)
endfunction
"}}}
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: foldmethod=marker