0

UltiSnips で vim を使用していますが、動作していますが、トリガー全体を記述した場合のみです。トリガーの一部だけを書いてスニペットを拡張する方法はありますか? 以前は SnipMate を使用していましたが、うまくいきました。

例: 次のようなトリガーがある場合:

snippet someTrigger
blah blah
endsnippet

次のように入力すると、スニペットが展開されます。

someTrigger<tab>

しかし、私がタイプするときはそうではありません

some<tab>
4

3 に答える 3

2

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 つを選択するオプションを提供するメニューが表示されます。

于 2014-04-23T21:48:41.877 に答える