mappings.vim 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. "=============================================================================
  2. " FILE: mappings.vim
  3. " AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>
  4. " License: MIT license {{{
  5. " Permission is hereby granted, free of charge, to any person obtaining
  6. " a copy of this software and associated documentation files (the
  7. " "Software"), to deal in the Software without restriction, including
  8. " without limitation the rights to use, copy, modify, merge, publish,
  9. " distribute, sublicense, and/or sell copies of the Software, and to
  10. " permit persons to whom the Software is furnished to do so, subject to
  11. " the following conditions:
  12. "
  13. " The above copyright notice and this permission notice shall be included
  14. " in all copies or substantial portions of the Software.
  15. "
  16. " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17. " OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18. " MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  19. " IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  20. " CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  21. " TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  22. " SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  23. " }}}
  24. "=============================================================================
  25. let s:save_cpo = &cpo
  26. set cpo&vim
  27. function! neocomplete#mappings#define_default_mappings() abort "{{{
  28. inoremap <expr><silent> <Plug>(neocomplete_start_unite_complete)
  29. \ unite#sources#neocomplete#start_complete()
  30. inoremap <expr><silent> <Plug>(neocomplete_start_unite_quick_match)
  31. \ unite#sources#neocomplete#start_quick_match()
  32. if neocomplete#util#is_complete_select()
  33. inoremap <silent> <Plug>(neocomplete_start_omni_complete)
  34. \ <C-x><C-o>
  35. else
  36. inoremap <silent> <Plug>(neocomplete_start_omni_complete)
  37. \ <C-x><C-o><C-p>
  38. endif
  39. if neocomplete#util#is_complete_select()
  40. inoremap <silent> <Plug>(neocomplete_start_auto_complete)
  41. \ <C-r>=neocomplete#mappings#auto_complete()<CR>
  42. inoremap <silent> <Plug>(neocomplete_start_manual_complete)
  43. \ <C-r>=neocomplete#mappings#manual_complete()<CR>
  44. else
  45. inoremap <silent> <Plug>(neocomplete_start_auto_complete)
  46. \ <C-r>=neocomplete#mappings#auto_complete()<CR><C-r>=
  47. \neocomplete#mappings#popup_post()<CR>
  48. inoremap <silent> <Plug>(neocomplete_start_manual_complete)
  49. \ <C-r>=neocomplete#mappings#manual_complete()<CR><C-r>=
  50. \neocomplete#mappings#popup_post()<CR>
  51. endif
  52. if !has('patch-7.4.653')
  53. " To prevent Vim's complete() bug.
  54. if mapcheck('<C-h>', 'i') ==# ''
  55. inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"
  56. endif
  57. if mapcheck('<BS>', 'i') ==# ''
  58. inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"
  59. endif
  60. endif
  61. inoremap <silent> <Plug>(neocomplete_auto_refresh)
  62. \ <C-r>=neocomplete#mappings#refresh()<CR>
  63. endfunction"}}}
  64. function! neocomplete#mappings#auto_complete() abort "{{{
  65. let neocomplete = neocomplete#get_current_neocomplete()
  66. let cur_text = neocomplete#get_cur_text(1)
  67. let complete_pos =
  68. \ neocomplete#complete#_get_complete_pos(
  69. \ neocomplete.complete_sources)
  70. let base = cur_text[complete_pos :]
  71. let neocomplete.candidates = neocomplete#complete#_get_words(
  72. \ neocomplete.complete_sources, complete_pos, base)
  73. let neocomplete.complete_str = base
  74. let neocomplete.refresh = 0
  75. if empty(neocomplete.candidates)
  76. return ''
  77. endif
  78. " Start auto complete.
  79. call complete(complete_pos+1, neocomplete.candidates)
  80. return ''
  81. endfunction"}}}
  82. function! neocomplete#mappings#manual_complete() abort "{{{
  83. let neocomplete = neocomplete#get_current_neocomplete()
  84. let cur_text = neocomplete#get_cur_text(1)
  85. let complete_sources = neocomplete#complete#_get_results(
  86. \ cur_text, neocomplete.manual_sources)
  87. let complete_pos =
  88. \ neocomplete#complete#_get_complete_pos(
  89. \ complete_sources)
  90. let base = cur_text[complete_pos :]
  91. let neocomplete.complete_pos = complete_pos
  92. let neocomplete.candidates = neocomplete#complete#_get_words(
  93. \ complete_sources, complete_pos, base)
  94. let neocomplete.complete_str = base
  95. if empty(neocomplete.candidates)
  96. return ''
  97. endif
  98. " Start auto complete.
  99. call complete(complete_pos+1, neocomplete.candidates)
  100. return ''
  101. endfunction"}}}
  102. function! neocomplete#mappings#smart_close_popup() abort "{{{
  103. return neocomplete#mappings#cancel_popup()
  104. endfunction
  105. "}}}
  106. function! neocomplete#mappings#close_popup() abort "{{{
  107. let neocomplete = neocomplete#get_current_neocomplete()
  108. let neocomplete.complete_str = ''
  109. let neocomplete.old_cur_text = neocomplete#get_cur_text(1)
  110. let neocomplete.skip_next_complete = 1
  111. return pumvisible() ? "\<C-y>" : ''
  112. endfunction
  113. "}}}
  114. function! neocomplete#mappings#cancel_popup() abort "{{{
  115. let neocomplete = neocomplete#get_current_neocomplete()
  116. let neocomplete.complete_str = ''
  117. let neocomplete.old_cur_text = neocomplete#get_cur_text(1)
  118. let neocomplete.old_complete_pos = col('.')
  119. if mode() !=# 'i'
  120. let neocomplete.old_complete_pos += 1
  121. endif
  122. let neocomplete.old_linenr = line('.')
  123. let neocomplete.skip_next_complete = 1
  124. return pumvisible() ? "\<C-e>" : ''
  125. endfunction
  126. "}}}
  127. function! neocomplete#mappings#popup_post() abort "{{{
  128. return !pumvisible() ? "" :
  129. \ g:neocomplete#enable_auto_select ? "\<C-p>\<Down>" : "\<C-p>"
  130. endfunction"}}}
  131. function! neocomplete#mappings#undo_completion() abort "{{{
  132. if !neocomplete#is_enabled()
  133. return ''
  134. endif
  135. let neocomplete = neocomplete#get_current_neocomplete()
  136. " Get cursor word.
  137. let complete_str =
  138. \ (!exists('v:completed_item') || empty(v:completed_item)) ?
  139. \ neocomplete#helper#match_word(neocomplete#get_cur_text(1))[1] :
  140. \ v:completed_item.word
  141. let old_keyword_str = neocomplete.complete_str
  142. let neocomplete.complete_str = complete_str
  143. return (!pumvisible() ? '' :
  144. \ complete_str ==# old_keyword_str ? "\<C-e>" : "\<C-y>")
  145. \. repeat("\<BS>", strchars(complete_str)) . old_keyword_str
  146. endfunction"}}}
  147. function! neocomplete#mappings#complete_common_string() abort "{{{
  148. if !neocomplete#is_enabled()
  149. return ''
  150. endif
  151. " Get cursor word.
  152. let neocomplete = neocomplete#get_current_neocomplete()
  153. let neocomplete.event = 'mapping'
  154. let complete_str =
  155. \ neocomplete#helper#match_word(neocomplete#get_cur_text(1))[1]
  156. if complete_str == ''
  157. return ''
  158. endif
  159. " Save options.
  160. let ignorecase_save = &ignorecase
  161. try
  162. if neocomplete#is_text_mode()
  163. let &ignorecase = 1
  164. elseif g:neocomplete#enable_smart_case
  165. \ || g:neocomplete#enable_camel_case
  166. let &ignorecase = complete_str !~ '\u'
  167. else
  168. let &ignorecase = g:neocomplete#enable_ignore_case
  169. endif
  170. let candidates = neocomplete#filters#matcher_head#define().filter(
  171. \ { 'candidates' : copy(neocomplete.candidates),
  172. \ 'complete_str' : complete_str})
  173. if empty(candidates)
  174. return ''
  175. endif
  176. let common_str = candidates[0].word
  177. for keyword in candidates[1:]
  178. while !neocomplete#head_match(keyword.word, common_str)
  179. let common_str = common_str[: -2]
  180. endwhile
  181. endfor
  182. finally
  183. let &ignorecase = ignorecase_save
  184. endtry
  185. if common_str == ''
  186. \ || complete_str ==? common_str
  187. return ''
  188. endif
  189. return (pumvisible() ? "\<C-e>" : '')
  190. \ . repeat("\<BS>", strchars(complete_str)) . common_str
  191. endfunction"}}}
  192. function! neocomplete#mappings#fallback(i) abort "{{{
  193. let mapping = g:neocomplete#fallback_mappings[a:i]
  194. return (pumvisible() || (mapping ==? "\<C-x>\<C-o>"
  195. \ && &l:omnifunc == '')) ? "" :
  196. \ (mapping . (neocomplete#util#is_complete_select() ?
  197. \ "" : "\<C-p>"))
  198. endfunction"}}}
  199. function! neocomplete#mappings#refresh() abort "{{{
  200. let neocomplete = neocomplete#get_current_neocomplete()
  201. let neocomplete.refresh = 1
  202. return pumvisible() ? "\<C-e>" : ''
  203. endfunction"}}}
  204. " Manual complete wrapper.
  205. function! neocomplete#mappings#start_manual_complete(...) abort "{{{
  206. if !neocomplete#is_enabled()
  207. return ''
  208. endif
  209. if neocomplete#helper#get_force_omni_complete_pos(
  210. \ neocomplete#get_cur_text(1)) >= 0
  211. return "\<C-x>\<C-o>"
  212. endif
  213. " Set context filetype.
  214. call neocomplete#context_filetype#set()
  215. let neocomplete = neocomplete#get_current_neocomplete()
  216. let sources = get(a:000, 0,
  217. \ keys(neocomplete#available_sources()))
  218. let neocomplete.manual_sources = neocomplete#helper#get_sources_list(
  219. \ neocomplete#util#convert2list(sources))
  220. let neocomplete.sources_filetype = ''
  221. call neocomplete#helper#complete_configure()
  222. " Start complete.
  223. return "\<C-r>=neocomplete#mappings#manual_complete()\<CR>"
  224. \ . (neocomplete#util#is_complete_select() ?
  225. \ "" : "\<C-r>=neocomplete#mappings#popup_post()\<CR>")
  226. endfunction"}}}
  227. let &cpo = s:save_cpo
  228. unlet s:save_cpo
  229. " vim: foldmethod=marker