270 lines
9 KiB
VimL
270 lines
9 KiB
VimL
|
"=============================================================================
|
||
|
" FILE: mappings.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
|
||
|
|
||
|
function! neocomplete#mappings#define_default_mappings() abort "{{{
|
||
|
inoremap <expr><silent> <Plug>(neocomplete_start_unite_complete)
|
||
|
\ unite#sources#neocomplete#start_complete()
|
||
|
inoremap <expr><silent> <Plug>(neocomplete_start_unite_quick_match)
|
||
|
\ unite#sources#neocomplete#start_quick_match()
|
||
|
if neocomplete#util#is_complete_select()
|
||
|
inoremap <silent> <Plug>(neocomplete_start_omni_complete)
|
||
|
\ <C-x><C-o>
|
||
|
else
|
||
|
inoremap <silent> <Plug>(neocomplete_start_omni_complete)
|
||
|
\ <C-x><C-o><C-p>
|
||
|
endif
|
||
|
if neocomplete#util#is_complete_select()
|
||
|
inoremap <silent> <Plug>(neocomplete_start_auto_complete)
|
||
|
\ <C-r>=neocomplete#mappings#auto_complete()<CR>
|
||
|
inoremap <silent> <Plug>(neocomplete_start_manual_complete)
|
||
|
\ <C-r>=neocomplete#mappings#manual_complete()<CR>
|
||
|
else
|
||
|
inoremap <silent> <Plug>(neocomplete_start_auto_complete)
|
||
|
\ <C-r>=neocomplete#mappings#auto_complete()<CR><C-r>=
|
||
|
\neocomplete#mappings#popup_post()<CR>
|
||
|
inoremap <silent> <Plug>(neocomplete_start_manual_complete)
|
||
|
\ <C-r>=neocomplete#mappings#manual_complete()<CR><C-r>=
|
||
|
\neocomplete#mappings#popup_post()<CR>
|
||
|
endif
|
||
|
|
||
|
if !has('patch-7.4.653')
|
||
|
" To prevent Vim's complete() bug.
|
||
|
if mapcheck('<C-h>', 'i') ==# ''
|
||
|
inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"
|
||
|
endif
|
||
|
if mapcheck('<BS>', 'i') ==# ''
|
||
|
inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
inoremap <silent> <Plug>(neocomplete_auto_refresh)
|
||
|
\ <C-r>=neocomplete#mappings#refresh()<CR>
|
||
|
endfunction"}}}
|
||
|
|
||
|
function! neocomplete#mappings#auto_complete() abort "{{{
|
||
|
let neocomplete = neocomplete#get_current_neocomplete()
|
||
|
let cur_text = neocomplete#get_cur_text(1)
|
||
|
let complete_pos =
|
||
|
\ neocomplete#complete#_get_complete_pos(
|
||
|
\ neocomplete.complete_sources)
|
||
|
let base = cur_text[complete_pos :]
|
||
|
|
||
|
let neocomplete.candidates = neocomplete#complete#_get_words(
|
||
|
\ neocomplete.complete_sources, complete_pos, base)
|
||
|
let neocomplete.complete_str = base
|
||
|
let neocomplete.refresh = 0
|
||
|
if empty(neocomplete.candidates)
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
" Start auto complete.
|
||
|
call complete(complete_pos+1, neocomplete.candidates)
|
||
|
return ''
|
||
|
endfunction"}}}
|
||
|
|
||
|
function! neocomplete#mappings#manual_complete() abort "{{{
|
||
|
let neocomplete = neocomplete#get_current_neocomplete()
|
||
|
let cur_text = neocomplete#get_cur_text(1)
|
||
|
let complete_sources = neocomplete#complete#_get_results(
|
||
|
\ cur_text, neocomplete.manual_sources)
|
||
|
let complete_pos =
|
||
|
\ neocomplete#complete#_get_complete_pos(
|
||
|
\ complete_sources)
|
||
|
let base = cur_text[complete_pos :]
|
||
|
|
||
|
let neocomplete.complete_pos = complete_pos
|
||
|
let neocomplete.candidates = neocomplete#complete#_get_words(
|
||
|
\ complete_sources, complete_pos, base)
|
||
|
let neocomplete.complete_str = base
|
||
|
if empty(neocomplete.candidates)
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
" Start auto complete.
|
||
|
call complete(complete_pos+1, neocomplete.candidates)
|
||
|
return ''
|
||
|
endfunction"}}}
|
||
|
|
||
|
function! neocomplete#mappings#smart_close_popup() abort "{{{
|
||
|
return neocomplete#mappings#cancel_popup()
|
||
|
endfunction
|
||
|
"}}}
|
||
|
function! neocomplete#mappings#close_popup() abort "{{{
|
||
|
let neocomplete = neocomplete#get_current_neocomplete()
|
||
|
let neocomplete.complete_str = ''
|
||
|
let neocomplete.old_cur_text = neocomplete#get_cur_text(1)
|
||
|
let neocomplete.skip_next_complete = 1
|
||
|
|
||
|
return pumvisible() ? "\<C-y>" : ''
|
||
|
endfunction
|
||
|
"}}}
|
||
|
function! neocomplete#mappings#cancel_popup() abort "{{{
|
||
|
let neocomplete = neocomplete#get_current_neocomplete()
|
||
|
let neocomplete.complete_str = ''
|
||
|
let neocomplete.old_cur_text = neocomplete#get_cur_text(1)
|
||
|
let neocomplete.old_complete_pos = col('.')
|
||
|
if mode() !=# 'i'
|
||
|
let neocomplete.old_complete_pos += 1
|
||
|
endif
|
||
|
let neocomplete.old_linenr = line('.')
|
||
|
let neocomplete.skip_next_complete = 1
|
||
|
|
||
|
return pumvisible() ? "\<C-e>" : ''
|
||
|
endfunction
|
||
|
"}}}
|
||
|
|
||
|
function! neocomplete#mappings#popup_post() abort "{{{
|
||
|
return !pumvisible() ? "" :
|
||
|
\ g:neocomplete#enable_auto_select ? "\<C-p>\<Down>" : "\<C-p>"
|
||
|
endfunction"}}}
|
||
|
|
||
|
function! neocomplete#mappings#undo_completion() abort "{{{
|
||
|
if !neocomplete#is_enabled()
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
let neocomplete = neocomplete#get_current_neocomplete()
|
||
|
|
||
|
" Get cursor word.
|
||
|
let complete_str =
|
||
|
\ (!exists('v:completed_item') || empty(v:completed_item)) ?
|
||
|
\ neocomplete#helper#match_word(neocomplete#get_cur_text(1))[1] :
|
||
|
\ v:completed_item.word
|
||
|
|
||
|
let old_keyword_str = neocomplete.complete_str
|
||
|
let neocomplete.complete_str = complete_str
|
||
|
|
||
|
return (!pumvisible() ? '' :
|
||
|
\ complete_str ==# old_keyword_str ? "\<C-e>" : "\<C-y>")
|
||
|
\. repeat("\<BS>", strchars(complete_str)) . old_keyword_str
|
||
|
endfunction"}}}
|
||
|
|
||
|
function! neocomplete#mappings#complete_common_string() abort "{{{
|
||
|
if !neocomplete#is_enabled()
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
" Get cursor word.
|
||
|
let neocomplete = neocomplete#get_current_neocomplete()
|
||
|
let neocomplete.event = 'mapping'
|
||
|
let complete_str =
|
||
|
\ neocomplete#helper#match_word(neocomplete#get_cur_text(1))[1]
|
||
|
|
||
|
if complete_str == ''
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
" Save options.
|
||
|
let ignorecase_save = &ignorecase
|
||
|
|
||
|
try
|
||
|
if neocomplete#is_text_mode()
|
||
|
let &ignorecase = 1
|
||
|
elseif g:neocomplete#enable_smart_case
|
||
|
\ || g:neocomplete#enable_camel_case
|
||
|
let &ignorecase = complete_str !~ '\u'
|
||
|
else
|
||
|
let &ignorecase = g:neocomplete#enable_ignore_case
|
||
|
endif
|
||
|
|
||
|
let candidates = neocomplete#filters#matcher_head#define().filter(
|
||
|
\ { 'candidates' : copy(neocomplete.candidates),
|
||
|
\ 'complete_str' : complete_str})
|
||
|
|
||
|
if empty(candidates)
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
let common_str = candidates[0].word
|
||
|
for keyword in candidates[1:]
|
||
|
while !neocomplete#head_match(keyword.word, common_str)
|
||
|
let common_str = common_str[: -2]
|
||
|
endwhile
|
||
|
endfor
|
||
|
finally
|
||
|
let &ignorecase = ignorecase_save
|
||
|
endtry
|
||
|
|
||
|
if common_str == ''
|
||
|
\ || complete_str ==? common_str
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
return (pumvisible() ? "\<C-e>" : '')
|
||
|
\ . repeat("\<BS>", strchars(complete_str)) . common_str
|
||
|
endfunction"}}}
|
||
|
|
||
|
function! neocomplete#mappings#fallback(i) abort "{{{
|
||
|
let mapping = g:neocomplete#fallback_mappings[a:i]
|
||
|
return (pumvisible() || (mapping ==? "\<C-x>\<C-o>"
|
||
|
\ && &l:omnifunc == '')) ? "" :
|
||
|
\ (mapping . (neocomplete#util#is_complete_select() ?
|
||
|
\ "" : "\<C-p>"))
|
||
|
endfunction"}}}
|
||
|
|
||
|
function! neocomplete#mappings#refresh() abort "{{{
|
||
|
let neocomplete = neocomplete#get_current_neocomplete()
|
||
|
let neocomplete.refresh = 1
|
||
|
return pumvisible() ? "\<C-e>" : ''
|
||
|
endfunction"}}}
|
||
|
|
||
|
" Manual complete wrapper.
|
||
|
function! neocomplete#mappings#start_manual_complete(...) abort "{{{
|
||
|
if !neocomplete#is_enabled()
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
if neocomplete#helper#get_force_omni_complete_pos(
|
||
|
\ neocomplete#get_cur_text(1)) >= 0
|
||
|
return "\<C-x>\<C-o>"
|
||
|
endif
|
||
|
|
||
|
" Set context filetype.
|
||
|
call neocomplete#context_filetype#set()
|
||
|
|
||
|
let neocomplete = neocomplete#get_current_neocomplete()
|
||
|
|
||
|
let sources = get(a:000, 0,
|
||
|
\ keys(neocomplete#available_sources()))
|
||
|
let neocomplete.manual_sources = neocomplete#helper#get_sources_list(
|
||
|
\ neocomplete#util#convert2list(sources))
|
||
|
let neocomplete.sources_filetype = ''
|
||
|
|
||
|
call neocomplete#helper#complete_configure()
|
||
|
|
||
|
" Start complete.
|
||
|
return "\<C-r>=neocomplete#mappings#manual_complete()\<CR>"
|
||
|
\ . (neocomplete#util#is_complete_select() ?
|
||
|
\ "" : "\<C-r>=neocomplete#mappings#popup_post()\<CR>")
|
||
|
endfunction"}}}
|
||
|
|
||
|
let &cpo = s:save_cpo
|
||
|
unlet s:save_cpo
|
||
|
|
||
|
" vim: foldmethod=marker
|