ultisnips のドキュメントの右にある 2 つの例を提供します (これらの特定の例を自分で書いたので、これらに精通しています)。
最初のものは、外部プラグインに依存しません:
function! ExpandPossibleShorterSnippet()
if len(UltiSnips#SnippetsInCurrentScope()) == 1 "only one candidate...
let curr_key = keys(UltiSnips#SnippetsInCurrentScope())[0]
normal diw
exe "normal a" . curr_key
exe "normal a "
return 1
endif
return 0
endfunction
inoremap <silent> <C-L> <C-R>=(ExpandPossibleShorterSnippet() == 0? '': UltiSnips#ExpandSnippet())<CR>
これにより、<CTRL-L>
既に書いたものと一致するスニペットが他にない場合、現在のスニペットが展開されます。
2 番目の例では、別のプラグインを使用しますunite
。
function! UltiSnipsCallUnite()
Unite -start-insert -winheight=100 -immediately -no-empty ultisnips
return ''
endfunction
inoremap <silent> <F12> <C-R>=(pumvisible()? "\<LT>C-E>":"")<CR><C-R>=UltiSnipsCallUnite()<CR>
nnoremap <silent> <F12> a<C-R>=(pumvisible()? "\<LT>C-E>":"")<CR><C-R>=UltiSnipsCallUnite()<CR>
一致するスニペットが 1 つしかない場合は、正常に機能します。2 つのスニペットが存在する場合、一致するオプションの 1 つを選択するオプションを提供するメニューが表示されます。