123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- "=============================================================================
- " 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
|