1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-02 22:40:06 +08:00

Fix autocomplete layer options (#3786)

close https://github.com/SpaceVim/SpaceVim/issues/3783
This commit is contained in:
Wang Shidong 2020-09-08 22:50:49 +08:00 committed by GitHub
parent dd628c0c0e
commit f41a2df34b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 15 deletions

View File

@ -26,6 +26,18 @@
" directory is `~/.SpaceVim/snippets/`. If `g:spacevim_force_global_config = 1`, " directory is `~/.SpaceVim/snippets/`. If `g:spacevim_force_global_config = 1`,
" SpaceVim will not append `./.SpaceVim/snippets` as default snippets directory. " SpaceVim will not append `./.SpaceVim/snippets` as default snippets directory.
if exists('s:return_key_behavior')
finish
else
let s:return_key_behavior = 'smart'
let s:tab_key_behavior = 'smart'
let g:_spacevim_key_sequence = 'nil'
let s:key_sequence_delay = 1
let g:_spacevim_autocomplete_delay = 50
let s:timeoutlen = &timeoutlen
endif
function! SpaceVim#layers#autocomplete#plugins() abort function! SpaceVim#layers#autocomplete#plugins() abort
let plugins = [ let plugins = [
\ [g:_spacevim_root_dir . 'bundle/vim-snippets', { 'on_event' : 'InsertEnter', 'loadconf_before' : 1}], \ [g:_spacevim_root_dir . 'bundle/vim-snippets', { 'on_event' : 'InsertEnter', 'loadconf_before' : 1}],
@ -116,7 +128,6 @@ function! SpaceVim#layers#autocomplete#plugins() abort
return plugins return plugins
endfunction endfunction
function! SpaceVim#layers#autocomplete#config() abort function! SpaceVim#layers#autocomplete#config() abort
if g:spacevim_autocomplete_parens if g:spacevim_autocomplete_parens
imap <expr>( imap <expr>(
@ -183,14 +194,19 @@ function! SpaceVim#layers#autocomplete#config() abort
elseif g:spacevim_snippet_engine ==# 'ultisnips' elseif g:spacevim_snippet_engine ==# 'ultisnips'
call SpaceVim#mapping#space#def('nnoremap', ['i', 's'], 'Unite ultisnips', 'insert snippets', 1) call SpaceVim#mapping#space#def('nnoremap', ['i', 's'], 'Unite ultisnips', 'insert snippets', 1)
endif endif
if !empty(g:_spacevim_key_sequence)
if g:spacevim_escape_key_binding !=# g:_spacevim_key_sequence
augroup spacevim_layer_autocomplete
autocmd!
autocmd InsertEnter * call s:apply_sequence_delay()
autocmd InsertLeave * call s:restore_sequence_delay()
augroup END
else
call SpaceVim#logger#warn('Can not use same value for escape_key_binding and auto_completion_complete_with_key_sequence')
endif
endif
endfunction 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
let g:_spacevim_autocomplete_delay = 50
function! SpaceVim#layers#autocomplete#set_variable(var) abort function! SpaceVim#layers#autocomplete#set_variable(var) abort
let s:return_key_behavior = get(a:var, let s:return_key_behavior = get(a:var,
@ -203,12 +219,12 @@ function! SpaceVim#layers#autocomplete#set_variable(var) abort
\ get(a:var, \ get(a:var,
\ 'auto-completion-tab-key-behavior', \ 'auto-completion-tab-key-behavior',
\ s:tab_key_behavior)) \ s:tab_key_behavior))
let s:key_sequence = get(a:var, let g:_spacevim_key_sequence = get(a:var,
\ 'auto_completion_complete_with_key_sequence', \ 'auto_completion_complete_with_key_sequence',
\ get(a:var, \ get(a:var,
\ 'auto-completion-complete-with-key-sequence', \ 'auto-completion-complete-with-key-sequence',
\ s:key_sequence)) \ g:_spacevim_key_sequence))
let s:key_sequence_delay = get(a:var, let g:_spacevim_key_sequence_delay = get(a:var,
\ 'auto_completion_complete_with_key_sequence_delay', \ 'auto_completion_complete_with_key_sequence_delay',
\ get(a:var, \ get(a:var,
\ 'auto-completion-complete-with-key-sequence-delay', \ 'auto-completion-complete-with-key-sequence-delay',
@ -233,6 +249,14 @@ function! SpaceVim#layers#autocomplete#getprfile() abort
endfunction
function! s:apply_sequence_delay() abort
let &timeoutlen = s:key_sequence_delay * 1000
endfunction
function! s:restore_sequence_delay() abort
let &timeoutlen = s:timeoutlen
endfunction endfunction
" vim:set et sw=2 cc=80: " vim:set et sw=2 cc=80:

View File

@ -125,6 +125,9 @@ call deoplete#custom#option('sources', {'cs': ['omnisharp']})
" public settings " public settings
call deoplete#custom#source('_', 'matchers', ['matcher_full_fuzzy']) call deoplete#custom#source('_', 'matchers', ['matcher_full_fuzzy'])
call deoplete#custom#source('file/include', 'matchers', ['matcher_head']) call deoplete#custom#source('file/include', 'matchers', ['matcher_head'])
if !empty(g:_spacevim_key_sequence) && g:spacevim_escape_key_binding !=# g:_spacevim_key_sequence
exe printf('inoremap <silent><expr>%s deoplete#manual_complete()', g:_spacevim_key_sequence)
endif
if g:spacevim_autocomplete_parens && exists('g:loaded_delimitMate') if g:spacevim_autocomplete_parens && exists('g:loaded_delimitMate')
imap <expr><C-h> deoplete#smart_close_popup()."<Plug>delimitMateBS" imap <expr><C-h> deoplete#smart_close_popup()."<Plug>delimitMateBS"

View File

@ -68,3 +68,7 @@ inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>" inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"
inoremap <expr><C-y> neocomplete#close_popup() inoremap <expr><C-y> neocomplete#close_popup()
inoremap <expr><C-e> neocomplete#cancel_popup() inoremap <expr><C-e> neocomplete#cancel_popup()
if !empty(g:_spacevim_key_sequence) && g:spacevim_escape_key_binding !=# g:_spacevim_key_sequence
exe printf('imap <silent>%s <Plug>(neocomplete_auto_refresh)', g:_spacevim_key_sequence)
endif

View File

@ -136,8 +136,10 @@ SpaceVim 选项 `snippet_engine` 设置为 `ultisnips`,将使用 [UltiSnips](h
- `cycle` 循环模式,自动再补全列表之间循环 - `cycle` 循环模式,自动再补全列表之间循环
- `nil` 当设为 nil 时,该行为和 `Tab` 的默认行为一致 - `nil` 当设为 nil 时,该行为和 `Tab` 的默认行为一致
3. `auto_completion_delay` 设置自动补全延迟时间,默认 50 毫秒 3. `auto_completion_delay` 设置自动补全延迟时间,默认 50 毫秒
4. `auto_completion_complete_with_key_sequence` 设置一个手动补全的由两个字符构成的按键序列,如果你按下这个序列足够快,将会启动补全;如果这一选项的值是 `nil` ,这一特性将被禁用。 4. `auto_completion_complete_with_key_sequence` 设置一个手动补全的由两个字符构成的按键序列,
5. `auto_completion_complete_with_key_sequence_delay` 设置手动补全按键序列延迟时间,默认是 0.1 如果你按下这个序列足够快,将会启动补全;如果这一选项的值是 `nil` ,这一特性将被禁用。
**NOTE:** 该选项不可以与全局选项 `escape_key_binding` 使用同一个值。
5. `auto_completion_complete_with_key_sequence_delay` 设置手动补全按键序列延迟时间,默认是 1 秒。
自动补全模块默认载入状态如下: 自动补全模块默认载入状态如下:

View File

@ -118,21 +118,23 @@ You can customize the user experience of autocompletion with the following layer
- `complete` completes with the current selection - `complete` completes with the current selection
- `smart` completes with current selection and expand snippet or argvs - `smart` completes with current selection and expand snippet or argvs
- `nil` - `nil`
By default it is `complete`. By default it is `complete`.
2. `auto_completion_tab_key_behavior` set the action to 2. `auto_completion_tab_key_behavior` set the action to
perform when the `TAB` key is pressed, the possible values are: perform when the `TAB` key is pressed, the possible values are:
- `smart` cycle candidates, expand snippets, jump parameters - `smart` cycle candidates, expand snippets, jump parameters
- `complete` completes with the current selection - `complete` completes with the current selection
- `cycle` completes the common prefix and cycle between candidates - `cycle` completes the common prefix and cycle between candidates
- `nil` insert a carriage return - `nil` insert a carriage return
By default it is `complete`. By default it is `complete`.
3. `auto_completion_delay` is a number to delay the completion after input in milliseconds, 3. `auto_completion_delay` is a number to delay the completion after input in milliseconds,
by default it is 50 ms. by default it is 50 ms.
4. `auto_completion_complete_with_key_sequence` is a string of two characters denoting 4. `auto_completion_complete_with_key_sequence` is a string of two characters denoting
a key sequence that will perform a `complete` action if the sequence as been entered a key sequence that will perform a `complete` action if the sequence as been entered
quickly enough. If its value is `nil` then the feature is disabled. quickly enough. If its value is `nil` then the feature is disabled.
**NOTE:** This option should not has same value as `escape_key_binding`
5. `auto_completion_complete_with_key_sequence_delay` is the number of seconds to wait for 5. `auto_completion_complete_with_key_sequence_delay` is the number of seconds to wait for
the autocompletion key sequence to be entered. The default value is 0.1 seconds. the autocompletion key sequence to be entered. The default value is 1 seconds.
This option is used for vim's `timeoutlen` option in insert mode.
The default configuration of the layer is: The default configuration of the layer is: