"============================================================================= " FILE: snippets_complete.vim " AUTHOR: Shougo Matsushita " License: MIT license "============================================================================= let s:source = { \ 'name' : 'snippets_complete', \ 'kind' : 'complfunc', \ 'min_pattern_length' : \ g:neocomplcache_auto_completion_start_length, \} function! s:source.initialize() abort " Initialize. call neocomplcache#set_dictionary_helper( \ g:neocomplcache_source_rank, 'snippets_complete', 8) call neocomplcache#set_completion_length('snippets_complete', \ g:neocomplcache_auto_completion_start_length) endfunction function! s:source.get_keyword_pos(cur_text) abort let cur_word = matchstr(a:cur_text, '\w\+$') let word_candidates = neocomplcache#keyword_filter( \ filter(values(neosnippet#helpers#get_snippets()), \ 'v:val.options.word'), cur_word) if !empty(word_candidates) return match(a:cur_text, '\w\+$') endif return match(a:cur_text, '\S\+$') endfunction function! s:source.get_complete_words(cur_keyword_pos, cur_keyword_str) abort let list = s:keyword_filter(neosnippet#helpers#get_snippets(), a:cur_keyword_str) for snippet in list let snippet.dup = 1 let snippet.menu = neosnippet#util#strwidthpart( \ snippet.menu_template, winwidth(0)/3) endfor return list endfunction function! s:keyword_filter(snippets, cur_keyword_str) abort " Uniq by real_name. let dict = {} " Use default filter. let list = neocomplcache#keyword_filter( \ values(a:snippets), a:cur_keyword_str) " Add cur_keyword_str snippet. if has_key(a:snippets, a:cur_keyword_str) call add(list, a:snippets[a:cur_keyword_str]) endif for snippet in neocomplcache#dup_filter(list) if !has_key(dict, snippet.real_name) || \ len(dict[snippet.real_name].word) > len(snippet.word) let dict[snippet.real_name] = snippet endif endfor return values(dict) endfunction function! neocomplcache#sources#snippets_complete#define() abort return s:source endfunction