dannの日記

 | 

2009-10-23

neocomplcacheの設定

23:05

snippetの補完とdictionaryからの補完は期待している動作になりました。かなり高速に動作するので、これは快適です!

まだ、常用するには調整が必要なので、neoconブランチを作って試してみています。

http://github.com/dann/dotfiles/tree/neocon

snipmate-snippetsをneocon用にconvertしてみたものも、以下の場所にいれときました。

http://github.com/dann/vim-neocon-snippets

" ============================================
" neocomplcache
" ============================================
 
drwxr-xr-x   5 dann staff     170 2008-09-02 23:06 ubiquity
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)

let g:NeoComplCache_EnableSkipCompletion = 0 で必ずcompletionする設定になるようです。

tagsでの補完は、現状自分のtagsでは動作が不安定なので、もうoffにしてしまってdict一本にしようかなぁと。

補完候補が多すぎると邪魔なのとcache時間が少し面倒になってしまう、syntaxなどのcompletionはoffにしたりと後々調整しようかなぁと思ってます。

要するに、dict, buffer, snippetから補完できればそれでいいかなぁと。

tagsがいいなぁといっていたのは、tag jumpを割と使っているので、そのtagで補完もできたらいいかなぁと思っていたんですが、これはスクリプト用意すればいいだけの話なので、あえてtagから補完できなくてもいいかなぁと少し思い始めました。

# あとは、dictの生成をどうするかだなぁ。package名だけひっぱってきて、それをdictに突っ込むスクリプトを書くかなぁ。

ShougoShougo2009/10/26 13:43いろいろと感想ありがとうございます。
neocomplcache Ver.3.06をリリースしました。
http://github.com/Shougo/neocomplcache/tree/v3.06
インクルード補完が実装されたほか、タグ補完が高速化して使い物になるようになってます。試してみてください。perlでディクショナリ補完ができないのはなんででしょう?

danndann2009/10/26 20:47どうもありがとうございます!3.06で試してみたところ、タグ補完もディクショナリ補完も両方できました。タグ補完も現実的な速度で動作してます! これは早いです!

vimを起動してスクリプトを編集する度にtagのcacheをするので、自分のtagの良だとvimは立ち上げっぱなしにして使う感じじゃないとダメそうですが、何かうまい使い方ってありますか?一つは、タグにいれるものを極端に減らしちゃうというのもあるかなぁとは思ってます。

danndann2009/10/26 21:42includeですが、以下のようにruby.snipを書いてみたのですが、保存するときにload_snippetsが無限ループして、エラーになりました。

include ruby-rails

Error detected while processing function <SNR>52_caching_snippets..<SNR>52_load_snippets..<SNR>52_load_snippet
s..<SNR>52_load_snippets..<SNR>52_load_snippets..

 |