理想未来ってなんやねん

娘可愛い。お父さん頑張る。

neocomplcacheの補完機能がヤバすぎる

ヤバいヤバい。
neocomplcacheの補完機能がヤバすぎる。

neocomplcacheの代表的機能

・キーワードの使用頻度によるランク付け
シンタックスごとのキーワード補完
・部分マッチ
・数字キーによるクイックマッチ
・ディクショナリ補完、タグ補完
ワイルドカードによる検索結果の絞り込み
・結果のキャッシュによる高速化
・ファイル名補完
・カーソル後方のキーワードに応じた補完
・SmartCase
・豊富なカスタマイズ項目
・文脈依存補完(3-gram completion)
Omni補完
・ローカルタグ補完
・自動タグファイルアップデート
・キーワード補完を試す
・Same filetype completion
preview windowに対応
シンタックス補完
プラグインで拡張可能
スニペット補完

まず、1つのプラグインですべて完結することがいいね。
autocomplpop.vimとか、snippetsEmu.vimとか、snipMate.vimは、もう必要ないな。

スニペットsnipMateライクな記述で簡単にかけるので、非常に良いです。


この記事についてTwitterでつぶやく

難点

そのうち解決するとおもいますが、現時点(2.39)で多少問題あります。
解決しました。

挿入するスニペット内に一行コメントがあると、そのコメント以下の行がコメントアウトされる。

set formatoptions+=rとなっていると発生する。
最新の2.40で解決しました。


回避するパッチを作ってみた。

--- autoload/neocomplcache/snippets_complete.vim.orig	2009-05-04 05:52:28.000000000 +0900
+++ autoload/neocomplcache/snippets_complete.vim	2009-05-04 21:54:55.000000000 +0900
@@ -289,6 +289,8 @@
     endif
 endfunction"}}}
 function! s:expand_newline()"{{{
+    let s:tmpformatoptions=&formatoptions
+    set formatoptions-=r
     " Check expand word.
     if !empty(&filetype) && has_key(s:snippets, &filetype)
         let l:expand = matchstr(getline('.'), '^.*<expand>')
@@ -323,6 +325,7 @@
 
     let s:snippet_holder_cnt = 1
     call s:search_snippet_range(s:begin_snippet, s:end_snippet)
+    let &formatoptions=s:tmpformatoptions
 endfunction"}}}
 function! s:search_snippet_range(start, end)"{{{
     let l:line = a:start


候補表示中にバックスペースで戻ると、エラーが発生する事がある。

下記のエラーが、よく発生します。
解決しました。(詳細はコメント参照)

--------------------
Error detected while processing function neocomplcache#manual_complete..<SNR>22_get_complete_words..neocomplcache#tags_complete#get_keyword_list..<SNR>26_initialize_tags:
line    7:
E431: Format error in tags file "tags"   
--------------------
Error detected while processing function neocomplcache#manual_complete..<SNR>22_get_complete_words..neocomplcache#snippets_complete#get_keyword_list..<SNR>25_keyword_filter:
line   17:
E488: Trailing characters
--------------------

回避策は後で調べる。(きっと、たぶん、調べないorz)

追記

上記エラーは、GUI版のMacVimで発生する。
CUI版のMacPorts vim 7.2.160では発生しない。も発生した。頻度の問題。MacVimの方がモッサリしているので発生しやすい。
taglist()をコールすると発生するので、neocomplcacheの問題ではなくMacVimの問題?