diff --git a/autoload/SpaceVim/layers/autocomplete.vim b/autoload/SpaceVim/layers/autocomplete.vim index 802446238..ab7798b3c 100644 --- a/autoload/SpaceVim/layers/autocomplete.vim +++ b/autoload/SpaceVim/layers/autocomplete.vim @@ -110,13 +110,19 @@ function! SpaceVim#layers#autocomplete#config() abort if s:tab_key_behavior ==# 'smart' if has('patch-7.4.774') imap SpaceVim#mapping#tab() - smap - \ neosnippet#expandable_or_jumpable() ? - \ "\(neosnippet_expand_or_jump)" : - \ (complete_parameter#jumpable(1) ? - \ "\(complete_parameter#goto_next_parameter)" : - \ "\") - imap SpaceVim#mapping#shift_tab() + if g:spacevim_snippet_engine ==# 'neosnippet' + smap + \ neosnippet#expandable_or_jumpable() ? + \ "\(neosnippet_expand_or_jump)" : + \ (complete_parameter#jumpable(1) ? + \ "\(complete_parameter#goto_next_parameter)" : + \ "\") + imap SpaceVim#mapping#shift_tab() + elseif g:spacevim_snippet_engine ==# 'ultisnips' + imap SpaceVim#mapping#tab() + imap SpaceVim#mapping#shift_tab() + else + endif else call SpaceVim#logger#warn('smart tab in autocomplete layer need patch 7.4.774') endif diff --git a/autoload/SpaceVim/mapping.vim b/autoload/SpaceVim/mapping.vim index f64b91d61..0d7e49978 100644 --- a/autoload/SpaceVim/mapping.vim +++ b/autoload/SpaceVim/mapping.vim @@ -79,9 +79,15 @@ function! SpaceVim#mapping#def(type, key, value, ...) abort endif endfunction -function! SpaceVim#mapping#shift_tab() abort - return pumvisible() ? "\" : "\delimitMateS-Tab" -endfunction +if g:spacevim_snippet_engine ==# 'neosnippet' + function! SpaceVim#mapping#shift_tab() abort + return pumvisible() ? "\" : "\delimitMateS-Tab" + endfunction +elseif g:spacevim_snippet_engine ==# 'ultisnips' + function! SpaceVim#mapping#shift_tab() abort + return pumvisible() ? "\" : "\=UltiSnips#JumpForwards()\\=cmp#ultisnips#JumpForward()\" + endfunction +endif function! SpaceVim#mapping#tab() abort return SpaceVim#mapping#tab#i_tab() diff --git a/autoload/SpaceVim/mapping/tab.vim b/autoload/SpaceVim/mapping/tab.vim index cd3112099..7d7bbb3d2 100644 --- a/autoload/SpaceVim/mapping/tab.vim +++ b/autoload/SpaceVim/mapping/tab.vim @@ -20,9 +20,23 @@ if g:spacevim_snippet_engine ==# 'neosnippet' endif endfunction elseif g:spacevim_snippet_engine ==# 'ultisnips' + function! SpaceVim#mapping#tab#expandable() + let snippet = UltiSnips#ExpandSnippetOrJump() + if g:ulti_expand_or_jump_res > 0 + return snippet + elseif pumvisible() + return "\" + else + return "\" + endif + endfunction function! SpaceVim#mapping#tab#i_tab() abort - return "\" + if getline('.')[col('.')-2] ==# '{'&& pumvisible() + return "\" + endif + return "\=SpaceVim#mapping#tab#expandable()\" endfunction endif + " vim:set et sw=2 cc=80: diff --git a/config/plugins_before/ultisnips.vim b/config/plugins_before/ultisnips.vim index 74dfcb0f1..c31149706 100644 --- a/config/plugins_before/ultisnips.vim +++ b/config/plugins_before/ultisnips.vim @@ -1,6 +1,6 @@ " If you want :UltiSnipsEdit to split your window. let g:UltiSnipsEditSplit="vertical" -let g:UltiSnipsExpandTrigger='' -let g:UltiSnipsJumpBackwardTrigger="" -let g:UltiSnipsJumpForwardTrigger='' +let g:UltiSnipsExpandTrigger='' +let g:UltiSnipsJumpBackwardTrigger='' +let g:UltiSnipsJumpForwardTrigger='' let g:UltiSnipsSnippetsDir = '~/.SpaceVim.d/UltiSnips'