forked from SpaceVim/SpaceVim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
autocomplete.vim
148 lines (136 loc) · 5.93 KB
/
autocomplete.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
""
" @section autocomplete, autocomplete
" @parentsection layers
" @subsection code completion
" SpaceVim uses neocomplete as the default completion engine if vim has lua
" support. If there is no lua support, neocomplcache will be used for the
" completion engine. Spacevim uses deoplete as the default completion engine
" for neovim. Deoplete requires neovim to be compiled with python support. For
" more information on python support, please read neovim's |provider-python|.
"
" SpaceVim includes YouCompleteMe, but it is disabled by default. To enable
" ycm, see |g:spacevim_enable_ycm|.
"
" @subsection snippet
" SpaceVim use neosnippet as the default snippet engine. The default snippets
" are provided by `Shougo/neosnippet-snippets`. For more information, please read
" |neosnippet|. Neosnippet support custom snippets, and the default snippets
" directory is `~/.SpaceVim/snippets/`. If `g:spacevim_force_global_config = 1`,
" SpaceVim will not append `./.SpaceVim/snippets` as default snippets directory.
function! SpaceVim#layers#autocomplete#plugins() abort
let plugins = [
\ ['honza/vim-snippets', { 'on_event' : 'InsertEnter', 'loadconf_before' : 1}],
\ ['Shougo/neco-syntax', { 'on_event' : 'InsertEnter'}],
\ ['ujihisa/neco-look', { 'on_event' : 'InsertEnter'}],
\ ['Shougo/context_filetype.vim', { 'on_event' : 'InsertEnter'}],
\ ['Shougo/neoinclude.vim', { 'on_event' : 'InsertEnter'}],
\ ['Shougo/neosnippet-snippets', { 'merged' : 0}],
\ ['Shougo/neopairs.vim', { 'on_event' : 'InsertEnter'}],
\ ['Raimondi/delimitMate', { 'merged' : 0}],
\ ]
" snippet
if g:spacevim_snippet_engine ==# 'neosnippet'
call add(plugins, ['Shougo/neosnippet.vim', { 'on_event' : 'InsertEnter',
\ 'on_ft' : 'neosnippet',
\ 'loadconf' : 1,
\ 'on_cmd' : 'NeoSnippetEdit'}])
elseif g:spacevim_snippet_engine ==# 'ultisnips'
call add(plugins, ['SirVer/ultisnips',{ 'loadconf_before' : 1,
\ 'merged' : 0}])
endif
if g:spacevim_autocomplete_method ==# 'ycm'
call add(plugins, ['ervandew/supertab', { 'loadconf_before' : 1, 'merged' : 0}])
call add(plugins, ['Valloric/YouCompleteMe', { 'loadconf_before' : 1, 'merged' : 0}])
elseif g:spacevim_autocomplete_method ==# 'neocomplete'
call add(plugins, ['Shougo/neocomplete', {
\ 'on_event' : 'InsertEnter',
\ 'loadconf' : 1,
\ }])
elseif g:spacevim_autocomplete_method ==# 'neocomplcache' "{{{
call add(plugins, ['Shougo/neocomplcache.vim', {
\ 'on_event' : 'InsertEnter',
\ 'loadconf' : 1,
\ }])
elseif g:spacevim_autocomplete_method ==# 'deoplete'
call add(plugins, ['Shougo/deoplete.nvim', {
\ 'on_event' : 'InsertEnter',
\ 'loadconf' : 1,
\ }])
if !has('nvim')
call add(plugins, ['SpaceVim/nvim-yarp', {'merged': 0}])
call add(plugins, ['SpaceVim/vim-hug-neovim-rpc', {'merged': 0}])
endif
endif
if has('patch-7.4.774')
call add(plugins, ['Shougo/echodoc.vim', {
\ 'on_cmd' : ['EchoDocEnable', 'EchoDocDisable'],
\ 'on_event' : 'CompleteDone',
\ 'loadconf_before' : 1,
\ }])
endif
call add(plugins, ['tenfyzhong/CompleteParameter.vim', {'merged': 0}])
return plugins
endfunction
function! SpaceVim#layers#autocomplete#config() abort
imap <expr>(
\ pumvisible() ?
\ complete_parameter#pre_complete("()") :
\ (len(maparg('<Plug>delimitMate(', 'i')) == 0) ?
\ "\<Plug>delimitMate(" :
\ '('
"mapping
if s:tab_key_behavior ==# 'smart'
if has('patch-7.4.774')
imap <silent><expr><TAB> SpaceVim#mapping#tab()
smap <expr><TAB>
\ neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" :
\ (complete_parameter#jumpable(1) ?
\ "\<plug>(complete_parameter#goto_next_parameter)" :
\ "\<TAB>")
imap <silent><expr><S-TAB> SpaceVim#mapping#shift_tab()
else
call SpaceVim#logger#warn('smart tab in autocomplete layer need patch 7.4.774')
endif
elseif s:tab_key_behavior ==# 'complete'
inoremap <expr> <Tab> pumvisible() ? "\<C-y>" : "\<C-n>"
elseif s:tab_key_behavior ==# 'cycle'
inoremap <expr> <Tab> pumvisible() ? "\<Down>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<Up>" : ""
elseif s:tab_key_behavior ==# 'nil'
endif
if s:return_key_behavior ==# 'smart'
imap <silent><expr><CR> SpaceVim#mapping#enter()
elseif s:return_key_behavior ==# 'complete'
imap <silent><expr><CR> pumvisible() ? "\<C-y>" : "\<CR>"
elseif s:return_key_behavior ==# 'nil'
endif
inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"
" in origin vim or neovim Alt + / will insert a /, this should be disabled.
imap <expr> <M-/>
\ neosnippet#expandable() ?
\ "\<Plug>(neosnippet_expand)" : ""
call SpaceVim#mapping#space#def('nnoremap', ['i', 's'], 'Unite neosnippet', 'insert sneppets', 1)
endfunction
let s:return_key_behavior = 'smart'
let s:tab_key_behavior = 'smart'
let s:key_sequence = 'nil'
let s:key_sequence_delay = 0.1
function! SpaceVim#layers#autocomplete#set_variable(var) abort
let s:return_key_behavior = get(a:var,
\ 'auto-completion-return-key-behavior',
\ 'nil')
let s:tab_key_behavior = get(a:var,
\ 'auto-completion-tab-key-behavior',
\ 'smart')
let s:key_sequence = get(a:var,
\ 'auto-completion-complete-with-key-sequence',
\ 'nil')
let s:key_sequence_delay = get(a:var,
\ 'auto-completion-complete-with-key-sequence-delay',
\ 0.1)
endfunction
" vim:set et sw=2 cc=80: