snippetをneocomplcacheで補完する

Shougoさんが作られているneocomplcacheも最近試してみています。autocomplpopのような補完やsnippetの補完などがneocomplcacheという一つのプラグインで実現されています。

以下が設定です。snippetは、.vim/snippetsに置く設定になっています。

設定

" ============================================
" neocomplcache
" ============================================
 
set complete=.,w,b,u,t,k
let g:NeoComplCache_EnableAtStartup = 1 
let g:NeoComplCache_KeywordCompletionStartLength = 1 
let g:NeoComplCache_PluginCompletionLength = { 
  \ 'snipMate_complete' : 1,
  \ 'buffer_complete' : 1,
  \ 'include_complete' : 2,
  \ 'syntax_complete' : 2,
  \ 'filename_complete' : 2,
  \ 'keyword_complete' : 2,
  \ 'omni_complete' : 1 
  \ }
let g:NeoComplCache_MinKeywordLength = 2 
let g:NeoComplCache_MinSyntaxLength = 2 
let g:NeoComplCache_SmartCase = 1 
let g:NeoComplCache_PartialCompletionStartLength = 2 
let g:NeoComplCache_PreviousKeywordCompletion = 1 
let g:NeoComplCache_EnableCamelCaseCompletion = 1 
let g:NeoComplCache_EnableUnderbarCompletion = 1 
let g:NeoComplCache_EnableSkipCompletion = 0 
let g:NeoComplCache_SnippetsDir = $HOME . '/.vim/snippets'
let g:NeoComplCache_DictionaryFileTypeLists = { 
  \ 'default' : '', 
  \ 'objc' : $HOME . '/.vim/dict/objectivec.dict',
  \ 'javascript' : $HOME . '/.vim/dict/javascript.dict',
  \ 'ruby' : $HOME . '/.vim/dict/ruby.dict',
  \ 'perl' : $HOME . '/.vim/dict/perl.dict',
  \ }
let g:NeoComplCache_SameFileTypeLists = { 
  \ 'perl' : 'man',
  \ 'erlang' : 'man',
  \ }

" neocon keybindings
"------------------
" <TAB> completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"

" snippets expand key
imap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
smap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)

使い方

  • Tabで選択
  • C-eでsnippetの展開

所感

アクティブに開発が進んでおり、機能セットもrichです。今後autocomplpopより便利になっていくかもしれないなぁと思ってwatchしています。

snippet補完の部分についてautocomplpopと比較すると、snippetやtagなどの補完候補がまとめて表示されるため、補完対象によって補完方法をわけることがないという点がメリットです。ただ、tagなどで補完候補がたくさんでる状況だと、明示的にわかれていたほうがいいのかもしれないので、もう少し使ってみようと思ってます。

現状、自分はautocomplpopを使っていますが、tagのcache速度の問題などが改善されて、bugがfixされてstableになればメインストリームになるかもしれないですね。