New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
g:neocomplcache_force_omni_patternsが動作しないことがある #244
Comments
osyoさんの.vimrcは試せなかったので、私はこの最小構成で試しました。 https://gist.github.com/3628411 しかし、再現しませんでした。 |
もうちょっと.vimrcの量を減らして見ました。そうして原因がほぼ判明。 |
コメントしようと思ったらコメントされていた。 |
修正して見ました。試してみてください。 |
ユーザー側での対処は無理です。プラグイン側で検出する必要があります。 |
neocomplcache を更新して試してみました。 |
あ、あと C++ のコードはこんな感じです。 #include <string>
int
main(){
std::string str;
str. // ここで補完を行う
return 0;
} |
うーん、たしかに挙動が変ですね。最小構成.vimrcではユーザー定義補完が呼ばれます。 |
どうやら、自分のいつもの環境と最小構成ではneocomplcacheが呼ばれるタイミングが微妙に異なるようです。原因は不明。
一応、それは修正したんですがis_omni_complete()の検出後Vimのキーワード補完が呼ばれます。 |
とりあえず、強制的にキーワード補完のウインドウを閉じることで対処出来ました。 |
こちらでも試してみました。 |
あ、手動()が出力さてなかった…。 |
もうちょっと試してみたんですが、どうやら手動オムニ補完した場合に clang_complete が正しく呼び出される場合と、正しく呼び出されない場合があるみたいです。 |
1つ原因がわかりました。 inoremap <expr><C-e> neocomplcache#cancel_popup() がマッピングされている場合オムニ補完ではなくてキーワード補完が呼び出されました。 #include <string>
int
main(){
std::string str;
str.str // キーワード補完が呼ばれる
return 0;
} そちらでも再現されるか確認をお願いします。 |
あと set path+=C:/MinGW/lib/gcc/mingw32/4.6.2/include/c++ を設定していると str. で『インクルードされたファイルのスキャン』が行われました。 |
修正しました。
これは、neocomplcacheの終了後になぜかキーワード補完が呼び出されるからです。
|
この挙動自体がVimのバグの可能性があり、ちょっと再現方法を調べています。 |
ありがとうございます。 |
すみません、自分が書いた最小コード(neocomplcacheを使わない)では再現しませんでした……。 補完関数内でreturn -3をすると、なぜかキーワード補完が呼ばれる、 補完状態が壊れている気もしますが原因はよくわかりません。 |
一瞬ポップアップメニューが出るのは解消されました。 |
了解。原因がよくわからなかったのが不安ですが、とりあえずcloseします。 |
とりあえず、しばらくこれで使ってみて問題がなければ。って感じで。 |
はい。ようやくneocomplcache-clang_completeがオワコンになりますね。 |
Twitter の方にも報告したんですが、こっちの方がいいと思ったので転載。 // 下記の設定の場合で再現
// let g:neocomplcache_force_omni_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'
// let g:neocomplcache_force_omni_patterns.cpp = '::'
// これであれば動作したので正規表現パターンが原因?
#include <iostream>
::iostream // :: を打つ
// インクルードファイルをスキャンしてキーワード補完が呼ばれる
// iostream が勝手に選択される
int
main(){
return 0;
} |
原因判明しました。clang_completeの自動補完を無効にしていなかったためです。
こうすると、上記の問題は起こらなくなりました。 |
clang_completeの自動補完を無効にすると、neocomplcacheが-3を返しても、うまく動作することを確認。 |
アーイエーアーそういう事か…。 |
ひとまず let g:clang_complete_auto = 0 としたところ上記に書いたグローバル空間上でのキーワード補完はされなくなりました。 let g:neocomplcache_force_omni_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|::' と変更。 |
manga_osyoさんより報告を受けましたが、こちらで再現しないのでここで議論することにします。
この設定ファイルを使用したとき、二回目のg:neocomplcache_force_omni_patternsが動作せず、keyword_completeやmember_completeが働くようです。
http://ideone.com/vdyQU
現象が再現するC++ソースコードも欲しいところです。ソースコードが一致していないと辛いです。
The text was updated successfully, but these errors were encountered: