diff --git a/autoload/unite/sources/ultisnips.vim b/autoload/unite/sources/ultisnips.vim new file mode 100644 index 0000000..30e2d83 --- /dev/null +++ b/autoload/unite/sources/ultisnips.vim @@ -0,0 +1,56 @@ +let s:save_cpo = &cpo +set cpo&vim + +let s:unite_source = { + \ 'name': 'ultisnips', + \ 'hooks': {}, + \ 'action_table': {}, + \ 'default_action': 'expand', + \ } + +let s:unite_source.action_table.preview = { + \ 'description' : 'ultisnips snippets', + \ 'is_quit' : 0, + \ } + +function! s:unite_source.action_table.preview.func(candidate) + " no nice preview at this point, cannot get snippet text + let snippet_preview = a:candidate['word'] + echo snippet_preview +endfunction + +let s:unite_source.action_table.expand = { + \ 'description': 'expand the current snippet', + \ 'is_quit': 1 + \} + +function! s:unite_source.action_table.expand.func(candidate) + let delCurrWord = (getline(".")[col(".")-1] == " ") ? "" : "diw" + exe "normal " . delCurrWord . "a" . a:candidate['trigger'] . " " + call UltiSnips#ExpandSnippet() + return '' +endfunction + +function! s:unite_source.gather_candidates(args, context) + let default_val = {'word': '', 'unite__abbr': '', 'is_dummy': 0, 'source': + \ 'ultisnips', 'unite__is_marked': 0, 'kind': 'command', 'is_matched': 1, + \ 'is_multiline': 0} + let snippet_list = UltiSnips#SnippetsInCurrentScope() + let canditates = [] + for snip in items(snippet_list) + let curr_val = copy(default_val) + let curr_val['word'] = snip[0] . " " . snip[1] + let curr_val['trigger'] = snip[0] + call add(canditates, curr_val) + endfor + return canditates +endfunction + +function! unite#sources#ultisnips#define() + return s:unite_source +endfunction + +"unlet s:unite_source + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/doc/UltiSnips.txt b/doc/UltiSnips.txt index 7a9e671..7389d74 100644 --- a/doc/UltiSnips.txt +++ b/doc/UltiSnips.txt @@ -236,7 +236,7 @@ vimrc file. > let g:UltiSnipsJumpBackwardTrigger="" UltiSnips will only map the jump triggers while a snippet is active to -interfer as little as possible with other mappings. +interfer as little as possible with other mappings. The default value for g:UltiSnipsJumpBackwardTrigger interferes with the built-in complete function: |i_CTRL-X_CTRL-K|. A workaround is to add the @@ -1284,6 +1284,22 @@ offers a really nice completion dialogue for snippets. neocomplete - UltiSnips ships with a source for neocomplete and therefore offers out of the box completion dialogue support for it too. +unite - UltiSnips has a source for unite. As an example of how you can use the +it add the following function and mappings to your vimrc: > + + function! UltiSnipsCallUnite() + Unite -start-insert -winheight=100 -immediately -no-empty ultisnips + return '' + endfunction + + inoremap =(pumvisible()? "\C-E>":"")=UltiSnipsCallUnite() + nnoremap a=(pumvisible()? "\C-E>":"")=UltiSnipsCallUnite() + +When typing in either insert or normal mode you will get the unite +interface with matching snippets. Pressing enter will expand the corresponding +snippet. If only one snippet matches the text in front of the cursor will be +expanded when you press the key. + Supertab - UltiSnips has built-in support for Supertab. Just use a recent enough version of both plugins and will either expand a snippet or defer to Supertab for expansion. diff --git a/test.py b/test.py index 0e1de5c..cb7c5b7 100755 --- a/test.py +++ b/test.py @@ -3406,6 +3406,20 @@ class Plugin_Neocomplete_BugTest(_VimTest): vim_config.append('let g:neocomplete#enable_auto_delimiter = 1') vim_config.append('let g:neocomplete#enable_refresh_always = 1') # End: Plugin: Neocomplete #}}} +# Plugin: unite {{{# +class Plugin_unite_BugTest(_VimTest): + plugins = ["Shougo/unite.vim"] + snippets = ("t", "Hello", "", "w") + keys = "iab\\ t=UltiSnipsCallUnite()\n" + wanted = "iab\\ Hello " + + def _extra_options_pre_init(self, vim_config): + vim_config.append(r'set iskeyword+=\\ ') + vim_config.append('function! UltiSnipsCallUnite()') + vim_config.append(' Unite -start-insert -winheight=100 -immediately -no-empty ultisnips') + vim_config.append(' return ""') + vim_config.append('endfunction') +# End: Plugin: unite #}}} # Plugin: Supertab {{{# class Plugin_SuperTab_SimpleTest(_VimTest): plugins = ["ervandew/supertab"]