-
Notifications
You must be signed in to change notification settings - Fork 135
Presentation file
- neocomplcache
究極のVim的補完環境
Shougo
- neocomplcacheとは?
VimScriptによって実装された究極の補完環境。
auto-complete.elのように、自動補完のインタフェースを一つに統合することができます。
タグ補完やディクショナリ補完も自前で実装しています。
通称ネオコン、もしくはnecoと呼ばれています。
- 入手方法
vim.orgにも登録しました!
ただし、最新版はgithubにあります。
[http://www.vim.org/scripts/script.php?script_id=2620](http://www.vim.org/scripts/script.php?script_id=2620)
- 使い方
まず、githubにある配布ファイルをVimのユーザディレクトリにインストールします。
Windowsの場合は$VIM/vimfiles/か$HOME/vimfiles、MacやLinuxの場合は$HOME/.vim/が一般的です。
[http://github.com/Shougo/neocomplcache/tarball/master](http://github.com/Shougo/neocomplcache/tarball/master)
最近はファイルが増えてきたため、フォルダごとコピーした方がよいでしょう。
Ver.3.00より、ディレクトリ構造が大きく変化しました。
昔のバージョンのファイルは削除してください。
そして、.vimrcで
`let g:neocomplcache_enable_at_startup = 1`
と設定すると、Vimの起動時に自動的に有効になります。
手動で有効にしたいときには、
:NeoComplCacheEnableを実行してください。
:NeoComplCacheDisableで無効になります。
- アップグレード方法
neocomplcacheは更新が頻繁にあるので、簡単にアップグレードできると便利です。
残念ながらWindowsでは使えないですが、drryさんがワンライナーを作ってくれました。
curl -L http://github.com/Shougo/neocomplcache/tarball/master | tar -xzC ~/.vim --strip-components=1 --exclude=presen
Windowsでも使えるワンライナーを現在募集中です。
参考:BSDでのアップグレード方法
fetch -q -o – http://github.com/Shougo/neocomplcache/tarball/master | tar -f – -xzC ~/.vim —strip-components=1 —exclude=presen
これはwillowletさんの記事を参考にしました。
[http://d.hatena.ne.jp/willowlet/20091118/1258521168](http://d.hatena.ne.jp/willowlet/20091118/1258521168)
- 似た機能を持ったスクリプト
- autocomplpop.vim
- auto-complete.el
どちらも有名なプラグインですので、ここで簡単に比較をしておきましょう。
- autocomplpop.vimの良いところ
- Vim標準の補完を呼ぶので高速
- 一部の言語はオムニ補完にも対応
- 情報が多い
- completefuncを登録して呼び出せる
- snipMateと連携できる
- 更新が盛ん
- autocomplpop.vimの悪いところ
- カスタマイズがしづらい
- 補完機能はVimの機能に制限されてしまう
- ATOK X3で暴走する
- 日本語入力中も補完候補が出る
- 補完機能が統合されていない
- プラグインによっては相性問題が発生する
- Vim 7.2以降にのみ対応
一時期更新が続いていましたが、現在はまた更新されなくなったようです。
基本的にVim標準の補完を呼び出すので、大幅な機能追加は望めません。
あまり設定をしなくても、それなりに動作します。
- auto-complete.elの良いところ
- 補完機能のカスタマイズがしやすい
- キーバインドのカスタマイズが容易
- 情報が多い
- プラグインで拡張でき、用意されているプラグインも豊富
- 比較的開発が盛ん
- yasnippets.elを呼び出して、スニペットを検索できる
- オムニ補完の搭載
- auto-complete.elの悪いところ
- Emacsen専用なので、Vimmerには使えない
- 設定が面倒
- 補完候補のスクロールができない
- 標準では部分マッチが使えない(別途プラグインをインストールすれば可)
- 補完位置の違う補完は統合できない
提供する機能はシンプルですが、カスタマイズしやすいのはよいですね。
ただしプラグインを作成するためには、ソースコードを解析しないといけません。
開発が頻繁にされているので、今後に期待です。
- neocomplcacheの良いところ
- 候補の絞り込みができる
- 単語の出現頻度によってソートができる
- 補完機能のカスタマイズがしやすい
- 補完機能はほとんど自前実装
- プラグインを追加することで拡張できる
- タグ補完やシンタックス補完が強力
- 毎週のように更新
- スニペットを検索できる
- vimshellと連携できる
- ファイル名補完やオムニ補完を統合
- インクルード補完
- クイックマッチ
- Vimオムニ補完
neocomplcacheの悪いところ
- 行数の多いバッファを開くときに重い
- 大量のバッファを開いていると遅くなる(ことがある)
- 開発が早いので、不安定(なことがある)
- 内部でcompletefuncを使っている
- メモリを大量に使う
- まだ発展途上なので、仕様変更が頻繁にある
- バグが多い
- 設定可能項目が多いので、初心者には敷居が高い
高機能なのが最大の魅力です。ただし良くも悪くも発展途上です。
作者の独断と偏見により、仕様は予告無く変更される場合があります。
autocomplpopに満足できない、アルファギーク向け。
安定した物が良ければ、vim.orgに置いてある物を使ってください。
[http://www.vim.org/scripts/script.php?script_id=2620](http://www.vim.org/scripts/script.php?script_id=2620)
こちらも一ヶ月に一度は更新されると思います。
- neocomplcacheの歴史
これまで愛用していたautocomplpop.vimが
Linux GVim上のATOK X3でおかしくなる
↓
それなら自分で作ってしまえ!
↓
補完が遅いなぁと思い始める
↓
それなら結果をキャッシュしてしまえ!
↓
今の時代はプラグイン化だ!
↓
スニペット補完も統合してしまおう
↓
さらなる暴走
↓
そして現在に至る……
詳しくはplugin/neocomplcache.vim内のChangeLog:で。
- neocomplcacheの代表的機能
- キーワードの使用頻度によるランク付け
- シンタックスごとのキーワード補完
- ディクショナリ補完、タグ補完
- インクルード補完
- ワイルドカードによる検索結果の絞り込み
- 結果のキャッシュによる高速化
- ファイル名補完
- SmartCase
- 豊富なカスタマイズ項目
- Omni補完
- タグ補完
- Same filetype completion
- シンタックス補完
- プラグインで拡張可能
- スニペット補完
面白そうな機能をどんどん追加していたら、かなり増えてきました。
あまりに多くの機能があるので、全てを把握しているのは作者くらいでしょう。
- キーワードの使用頻度によるランク付け
neocomplcacheではキーワード収集を自前で行っているため、
キーワードの使用回数を記録し、補完時の順位に反映させています。
使用頻度が高いものが上の方に来て、かなり便利です。
ただし解析するには時間がかかるので、キャッシュ率が上昇しないと使用頻度は考慮されません。
Ver.4.00より、すべてのプラグインの候補も使用頻度に基づいて並び替えるようになりました。
ただし、頻度解析はbuffer\_complete内で行われるので、これが無効になっていると動作しません。
- シンタックスごとのキーワード補完
言語ごとにキーワードを登録して補完ができるので、
例えばRubyでは$や@, ., ::といったキーワードに反応して補完ができます。
標準でも様々な言語に対応していますが、
「この言語に対応して欲しい」という要望があれば、可能な限り対応します。
最近のバージョンでは対応言語も増えて、かなりパワーアップしています。
例えばRubyではブロック付きメソッドが補完できます。
- ディクショナリ補完、タグ補完
ディクショナリ補完やタグ補完も自前で実装しています。
ファイルタイプ別に登録することで、自動的に読み込み、補完に使えます。
読み込むタグはカレントディレクトリごとに設定できます。
タグ補完は動作が遅かったですが、Ver.3.06より機能を大幅強化しました。
結果をキャッシュするので、実用的な速度になったと思います。
ただし、NeoComplCacheCachingTagsコマンドを実行しないと動作しません。
- インクルード補完
タグ補完のコードをベースに、インクルード補完を実装しました。
バッファを解析し、インクルードファイルを自動認識します。
結果をキャッシュするので、Vimに標準搭載されているインクルード補完より高速です。
通常は内部でタグファイルを生成して補完しますが、
ctagsが対応していない言語の場合は、ファイルを直接読み込んで候補の収集を行います。
Visual Studioのように使えるので非常に便利です。是非とも使ってみてください。
- ワイルドカードによる検索結果の絞り込み
多数の候補がある場合、絞り込みが大変なので実装しました。
`hoge*piyo`と入力すると、hogeがつき、その後にpiyoとなるものにマッチします。
正規表現的には`hoge.*piyo`と同じ意味です。
- 結果のキャッシュによる高速化
プラグインの名前の元にもなっている機能です。
あまりに初期段階の補完が遅すぎて、我慢ならなくなったので実装しました。
バッファ全体を一定のキャッシュラインで分割し、キャッシュライン単位でキーワードの収集を行います。
よって、編集し初めは補完候補の順番がおかしいです。ご了承ください。
neocomplcache Ver.4.00より、キャッシュルーチンを見直し、大幅な高速化が図られました。
特にキャッシュからの読み込みがかなり速くなっています。
- ファイル名補完
バッファ内で../といったディレクトリ名を入力するとファイル名の補完ができます。
autocomplpopで便利だったので、移植しました。
特にvimshellではこれがないと生きていけません。
ファイル名の自動補完に慣れてしまうと、いちいち``を入力しなければならない通常のシェルが馬鹿らしくなります。
ただしSmartCaseやUnderbar completionなど、一部の機能は動作しません。
実行ファイルには`‘*’`マークが付くので判別も容易です。
手動でファイル名補完を呼び出すこともできるので、
`inoremap neocomplcache#manual_filename_complete()`
このようにマッピングすると、標準のファイル名補完を置き換えることができます。
補完スキップも指定できます。手動補完はスキップされません。
Ver.2.71より、短縮ファイル名補完に対応。
ディレクトリ名の先頭の文字を入力し、/で区切ることで簡単に補完できます。
例:
`/hoge/piyo/hoge.vim`
を補完したい場合、
`/h/p/`
と入力するだけで、hoge.vimが候補として現れます。
Ver.3.11より、ファイル名補完は/を入力しなくても自動的に動作するようになりました。
\*によるワイルドカードにも対応。
- SmartCase
これを設定すると、`g:neocomplcache_enable_ignore_case`のとき(デフォルト)、
`hoge → hoge,Hoge`にマッチ。
`Hoge → Hoge`にマッチ。
となります。
つまり、大文字が含まれるときは大文字小文字を区別します。
大文字小文字で意味が変わる、RubyやCのマクロを使うときには便利です。
この機能を使用するには、
`let g:neocomplcache_enable_smart_case = 1`
とする必要があります。
- 豊富なカスタマイズ項目
調子に乗って機能を増やしていたら、たくさんの設定ができるようになっていました。
設定をカスタマイズすれば、Vim標準の補完機能をエミュレーションすることもできます。
ただしその場合、neocomplcacheを使う意味は薄れます。
設定項目は豊富にあるので、ヘルプを参照してください。
- Omni補完
thincaさんに要望されたので追加しました。
基本的にはautocomplpopのコードを移植し、C, C++, JavaScript, PHPといった新たな言語にも対応。
Rubyで,や.を入力したり、HTMLでタグが補完できます。
ただしあまりテストしていないので、きちんと動かないかもしれません。
あと候補が多いためか、動作が若干重いです。
無効にしたい場合は.vimrcで
`
if !exists(‘g:neocomplcache_omni_patterns’)
let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns[‘無効にしたいファイルタイプ’] = ’’
`
とすると、無効にできます。
Ver.2.68より、Omni補完呼び出しはneocomplcacheと統合されました。
Omni補完でも補完のスキップが動作します。
さらに、Ver.3.10より、キーワード補完との統合が実現。
より自然な補完が実装されました。
- Same filetype completion
昔のneocomplcacheでは、すべてのバッファから補完できたのですが、
今のバージョンでは同じfiletypeのバッファからしか補完できないようになりました。
しかしこれでは困る場合もあったので(例:C/C++でやりとりするとき)、
Same filetypeという概念を作り、
`
let g:neocomplcache_same_filetype_lists[‘c’] = ‘cpp’
let g:neocomplcache_same_filetype_lists[‘cpp’] = ‘c’
`
というように設定すれば、C/C++間のバッファで補完できるようになります。
一方だけ設定すれば、相互でない補完も可能です。
- シンタックス補完
Ver.2.17より、プラグインで実装しました。
`:syn list`の結果を解析し、キーワードを補完候補に加えます。
1度目は候補をキャッシュするので、若干時間がかかりますが、その後は高速に動作します。
Vimの豊富なシンタックスキーワードを有効活用するので、非常に便利です。
ソースコードも短いので、プラグイン作りの勉強にも最適です。
追記:
Ver.2.23より、正規表現のパターンも解析するようになりました。
これで、HaskellやTeXといったファイルでもシンタックス補完が有効になります。
ただし\(\)や[]を使った複雑な正規表現では、上手くパースできないことがあります。
Action scriptを補完するとき、シンタックスの補完候補が小文字になってしまうことがあります。
これはシンタックスファイルの
syn case ignore
が悪さをしているせいです。
プラグイン側では対処しようがないので、気になるようだったら直接シンタックスファイルを修正してください。
- CamelCase補完
thincaさんの発案により実装。
大文字でAIOOBEと打つと、ArrayIndexOutOfBoundsException が候補に出てきます。
つまり、大文字を単語の区切りとして認識しています。
小文字を混ぜたり最後まで完全に打たなくてもよしなに解釈してくれます。
Eclipseではこの補完が実装されているようです。
この機能を使用するには、
`let g:neocomplcache_enable_camel_case_completion = 1`
とする必要があります。
- Underbar補完
Emacsのcompleter.elに似たような機能があるので実装。
``区切りで`f_b_b`と打つと、`foo_bar_baz` が候補に出てきます。
つまり、`_`を単語の区切りとして認識しています。C言語などの``を多用する言語で便利。
この機能を使用するには、
`let g:neocomplcache_enable_underbar_completion = 1`
とする必要があります。
- プラグインで拡張可能
Ver.2.10にて、複雑だったソースコードを分割し、ついに補完をプラグインで拡張できるようになりました。
他のプラグインを読み込む部分も実装したので、夢が広がります。
プラグインの作り方については、今後ドキュメントを用意する予定ですが、
やる気があるならば`autoload/neocomplcache/sources/syntax_complete.vim`などを読んでみてください。
autoload/neocomplcache/sourcesディレクトリにプラグインファイルをおいておけば、補完時に自動で読み込まれます。
Ver.3.00より、プラグインを配置するディレクトリが変更されたので注意してください。
プラグインの作り方は、VimHacksの記事を参照してください。
[http://vim-users.jp/2009/10/hack93/](http://vim-users.jp/2009/10/hack93/)
- 補完関数
Ver.3.00にて、オムニ補完とファイル名補完を分離し、補完関数として実装し直しました。
やる気があるならば`autoload/neocomplcache/sources/filename_complete.vim`などを読んでみてください。
autoload/neocomplcache/sourcesディレクトリにファイルをおいておけば、自動で読み込まれます。
プラグインと補完関数の違いは、プラグインはカーソル前のキーワードに反応しますが、
補完関数は独自に補完位置を決められるということです。
Vim標準の補完でいうと、プラグインによる補完はキーワード補完に対応し、
補完関数による補完は、オムニ補完やユーザ定義補完に対応します。
- 確定した補完候補をキャンセルする
Ver.2.67より実装。キーマッピングを定義することで、確定した補完候補をキャンセルできます。
カーソル前のキーワードを補完前の文字列で置き換える形で実装しているので、``で確定していなくても動作します。
確定前の補完候補のキャンセルには使用できないので注意してください。
例:
`
inoremap neocomplcache#undo_completion()
`
自動キャッシュの制御
Ver.2.64よりオプションが追加され、キャッシュの制御がやりやすくなりました。
`g:neocomplcache_caching_limit_file_size`オプションではキャッシュする最大ファイルサイズを設定します。
これより大きいファイルは自動でキャッシュされません。
`g:neocomplcache_disable_caching_buffer_name_pattern`オプションではキャッシュしないバッファ名パターンを設定します。
正規表現で指定するので、\|で区切れば複数のパターンを指定できます。
プラグインごとに補完開始文字数を設定
Ver.2.71より、プラグインごとに補完開始文字数を設定できるようになりました。
例:
`
let g:neocomplcache_auto_completion_start_length = 1
if !exists(‘g:neocomplcache_plugin_completion_length’)
endif
let g:neocomplcache_plugin_completion_length = {
\‘snippets_complete’ : 1,
\‘buffer_complete’ : 2,
\‘syntax_complete’ : 2,
\‘tags_complete’ : 3,
\}
`
この例ではsnippets\completeのみ1文字で補完、tags\completeは3文字、他は2文字で補完するようにしています。
`g:neocomplcache_auto_completion_start_length`を変更しないと、
入力文字数が`g:neocomplcache_auto_completionstartlength`を超えるまで自動補完が呼び出されないので注意してください。
- プラグインの無効化
Ver.3.09より、プラグインや補完関数を無効化できるようになりました。
`
let g:neocomplcache_plugin_disable = {
\‘tags_complete’ : 1,
\‘omni_complete’ : 1,
\}
`
プラグインや補完関数名をキーにして、その値を1にすることで無効になります。
.vimrcに書いておかないと有効にならないので注意してください。
- クイックマッチ
Ver.3.08で一度削除されましたが、Ver.3.11で復活しました。
これは’-’を入力することでクイックマッチリストを作成し、
候補の横に表示されている英数字キーで選択できる機能です。
Ver.3.15より、ファイルタイプごとにクイックマッチリストを表示する入力パターンを制御できるようになりました。
defaultを指定すると、通常時の入力パターンを設定できます。
`
let g:neocomplcache_quick_match_patterns[‘default’] = ‘\`’
`
とすると、’\`‘入力時にクイックマッチリストを表示します。
`
let g:neocomplcache_quick_match_patterns[’scheme’] = ‘;’
`
とすれば、filetypeがschemeの時のみ’;‘を入力パターンとします。
初期値の’-’では入力時に不便な場合、変更してください。
- Vimオムニ補完
VimScriptを解析し、その場に応じた候補を出します。
たとえば、行頭ならコマンド名、setの後はオプション名、などです。
ローカル変数や関数の引数、endの対応関係も解析するので、かなり優れた補完候補です。
- 知名度
autocomplpop: 79,600件
auto-complete.el: 211,000件
neocomplcache: 41,700件
昔と比較すると、かなり有名になってきました。
今はまだ口コミレベルですが、autocomplpop並に有名になる日も近いでしょう。
追記:
thincaさんに紹介されました!!
[http://d.hatena.ne.jp/thinca/20090305/1236191531](http://d.hatena.ne.jp/thinca/20090305/1236191531)
メインで使っていただけているようで光栄です。
このエントリに刺激され、Omni補完を実装しました。
追記2:
はてなキーワードにも登録されました!
[http://d.hatena.ne.jp/keyword/neocomplcache](http://d.hatena.ne.jp/keyword/neocomplcache)
追記3:
snippetファイルの設定例
[http://d.hatena.ne.jp/cooldaemon/20090807/1249644264](http://d.hatena.ne.jp/cooldaemon/20090807/1249644264)
解説がなかなか詳しいので役立ちます。
追記4:
include補完の解説
[http://d.hatena.ne.jp/thinca/20091026/1256569191](http://d.hatena.ne.jp/thinca/20091026/1256569191)
追記5:
ネオコンについて良くある質問
[http://vim-users.jp/2009/10/hack89/](http://vim-users.jp/2009/10/hack89/)
- 現在開発されているプラグイン
snipMate\_complete.vim
[http://gist.github.com/99936](http://gist.github.com/99936)
thincaさん作。
snipMateの関数をneocomplcacheから呼び出し、補完します。
このプラグインを使用するためには、snipMateにパッチを当てる必要があります。
しかし、neocomplcacheにはスニペットの同期が実装されたので必要ないでしょう。
構造が単純なので、プラグイン作りのサンプルとして便利。
ただし若干古いです。
- 良くある質問
Q: 自動補完してEnterを入力すると、インデントがおかしくなる。
A: 特にRubyで問題が発生することが多いようです。
インデントを保持しつつ、ポップアップを閉じるために、私はこのように設定しています。
`
inoremap pumvisible() ? neocomplcache#close_popup().“\X\” : “\X\”
`
- 今後の予定
インクルード補完がまだキャッシュタイミングに問題があるので、どうにかしたいと思っています。
補完関数を気軽に登録して手動補完できるように、新しいプラグインを作る予定です。
- まとめ
機能追加の要望やバグ、質問等があれば、githubのIssuesに書いてください。
[http://github.com/Shougo/neocomplcache/issues](http://github.com/Shougo/neocomplcache/issues)
まめにチェックをしているので、皆さんのブログに書いていただいてもかまいません。
Twitterやブログもやってます。
[http://vinarian.blogspot.com/](http://vinarian.blogspot.com/)
[http://twitter.com/ShougoMatsu](http://twitter.com/ShougoMatsu)
更新情報は主にブログに、重要な情報はTwitterでもアナウンスする予定です。
Twitterはneocomplcache開発日記と化しているので、こまめにチェックするとおもしろいかもしれません。
最近はLingr内の補完部屋にも常駐しています。
[http://lingr.com/room/completion](http://lingr.com/room/completion)
実装してみて分かりましたが、補完にはまだまだ無限の可能性があります。
みんなの力で、どんどんneocomplcacheを良くしていきましょう。
夢はVimのキラープラグインとなることです。
- 更新履歴
2010/09/08 本体から分離した。
2010/06/22 古い項目を整理した。
2010/03/05 snippet補完の項を分離。
2009/12/27 MarkDown化。
2009/12/15 ワンライナーを修正。
2009/12/08 neocomplcache Ver.4.00に対応。
2009/11/25 neocomplcache Ver.3.18に対応。
2009/11/20 neocomplcache Ver.3.16に対応。
2009/11/17 FreeBSD上でのインストール方法を追加。
2009/11/11 neocomplcache Ver.3.15に対応。
2009/11/11 neocomplcache Ver.3.12に対応。
2009/11/09 neocomplcache Ver.3.11に対応。
2009/11/07 neocomplcache Ver.3.10に対応。
2009/10/31 neocomplcache Ver.3.09に対応。
2009/10/28 neocomplcache Ver.3.08に対応。
2009/10/23 neocomplcache Ver.3.05に対応。
2009/10/02 neocomplcache Ver.3.01に対応。
2009/09/27 neocomplcache Ver.3.00に対応。
2009/09/22 neocomplcache Ver.2.78に対応。
2009/09/17 neocomplcache Ver.2.77に対応。
2009/09/12 neocomplcache Ver.2.76に対応。
2009/08/22 neocomplcache Ver.2.71に対応。
2009/08/12 neocomplcache Ver.2.68に対応。
2009/08/10 neocomplcache Ver.2.67に対応。
2009/07/26 neocomplcache Ver.2.64に対応。
2009/07/10 neocomplcache Ver.2.62に対応。
2009/05/30 neocomplcache Ver.2.57に対応。細々とした修正。
2009/05/21 neocomplcache Ver.2.56に対応。
2009/05/18 neocomplcache Ver.2.55に対応。
2009/05/15 分かり易いように全体的に修正。
2009/05/14 neocomplcache Ver.2.50に対応。
2009/05/10 neocomplcache Ver.2.42に対応。
2009/05/05 neocomplcache Ver.2.40に対応。
2009/04/29 neocomplcache Ver.2.38に対応。
2009/04/25 neocomplcache Ver.2.36に対応。ついでに全体的に修正しました。
2009/04/23 neocomplcache Ver.2.35に対応。
2009/04/21 neocomplcache Ver.2.34に対応。
2009/04/21 neocomplcache Ver.2.33に対応。
2009/04/19 neocomplcache Ver.2.32に対応。
2009/04/18 neocomplcache Ver.2.31に対応。ついでに全体的に修正しました。
2009/04/16 neocomplcache Ver.2.27に対応。
2009/04/11 neocomplcache Ver.2.24に対応。
2009/04/10 neocomplcache Ver.2.23に対応。
2009/04/09 アップグレード方法を追加。
2009/04/07 neocomplcache Ver.2.20に対応。
2009/04/04 neocomplcache Ver.2.18に対応。
2009/04/03 neocomplcache Ver.2.17に対応。
2009/04/01 neocomplcache Ver.2.16に対応。
2009/03/31 設定例がバグっていたので修正。
2009/03/30 neocomplcache Ver.2.14に対応。
2009/03/27 neocomplcache Ver.2.11に対応。
2009/03/27 neocomplcache Ver.2.10に対応。
2009/03/26 neocomplcache Ver.2.02に対応。
2009/03/25 neocomplcache Ver.2.01に対応。
2009/03/20 neocomplcache Ver.2.00に対応。
2009/03/12 neocomplcache Ver.1.58に対応。
2009/03/8 neocomplcache Ver.1.54に対応。
2009/03/7 neocomplcache Ver.1.52に対応。
2009/03/6 neocomplcache Ver.1.50に対応。
2009/03/5 neocomplcache Ver.1.49に対応。