Github の紹介に従って、Vim、Vundle、およびYouCompleteMeプラグインをコンパイルしてインストールしました。しかし、私の Vim では YouCompleteMe プラグインがうまく動作しません。変数の名前を自動補完できますが、STL オブジェクト (ベクトル、マップ) の操作を自動補完しません。クラスの「this->」をオートコンプリートすることさえできません。いつも「(^U^N^P) パターンが見つかりません」と表示されます。皆さん、これを見たことがありますか?Ubuntu 12.04 を使用しています。私は何をすべきか?
2 に答える
プラグインのgithub リポジトリの readme で、この問題が解決されるようになりました。
これは、libclang の問題が原因です。バイナリを clang からコンパイルすると、正しいデフォルトのヘッダー検索パスが使用されますが、libclang.so からコンパイルすると使用されません。この問題は、他の OS よりも一部の OS に影響を与えるようです。特に OS X Mavericks ではこれに問題があるようです。
現在の回避策は、echo | を呼び出すことです。clang -v -E -x c++ - #include <...> search starts here: 見出しの下のパスを見てください。これらのパスを取得し、個々のパスの先頭に -isystem を追加し、それらすべてを .ycm_extra_conf.py ファイルの FlagsForFile 関数から返されるフラグのリストに追加する必要があります。
対応する問題を確認することもできます
私も答えを探してここに来ました。私はPythonを知らず、これまで何かをハッキングしたことはありません。だからここに私がそれについて行った方法があります。
エラー メッセージを見つけます。私は ~/.vim/bundle/YouCompleteMe に行き、 "builtin includes" を grep しました。なんで?それはエラーメッセージの一部であるため
- を。そこに見つからなかったので、より高いレベル(cd ..)に移動して繰り返しました。
- b. 以下を参照してください。/vundle/plugin/libclang.py: print "WARNING: NxD libclang can't find the builtin includes."
このファイルが実行されていることを確認するためにエラー メッセージを修正しました (私のイニシャル NxD) - 動作しました。
- メッセージはinitClangCompleteによって出力されます
- この呼び出しの後にメッセージが出力される builtinHeaderPath = getBuiltinHeaderPath(library_path) したがって、builtinHeaderPath をさらに詳しく調べます。
getBuiltinHeaderPath は、既知のディレクトリでループを実行します。私は2つのclangをインストールしています
- を。~/Downloads ディレクトリ - 世界中のすべてのソフトウェアがダンプされる場所
- b. /usr/local クローン、コンパイル、ビルドした最新のclangが欲しかったからです
この配列に両方のパスを追加しました: knownPaths
"/usr/local/include", "/usr/local/lib/clang/3.3", "/home/nxd/Downloads/clang+llvm-3.2-x86_64-linux-ubuntu-12.04/clang/3.2"
「、」はPythonの配列要素の区切り記号であることに注意しました。また、print -> は Python でメッセージを出力し、引数は C スタイルの %s、%d などで動作することも以前に指摘しました (最初に「組み込みインクルード」メッセージが画面に表示された方法です)。
また、いくつかの print ステートメントをループにダンプしたので、何が表示され、何を行っているかを確認してください。
部分コード変更関数「getBuiltinHeaderPath」
print "active path from knownPaths is |%s|" %path files = os.listdir(path) print " files in path is |%s|" % files print " len (files) is |%d|" % len(files) if len(files) >= 1: files = sorted(files) subDir = files[-1] else: subDir = '.' # nxd - subDir = '.' path = path + "/" + subDir + "/include/" print " len (files) is |%d|" % len(files) print " files[-1] is |%s|" % files[-1] print "searching in path : |%s| " % path
files[-1] の予想される動作は、作成者が意図したものではないことに気付き、if 条件の後に変更を加えて変更しませんでした。
新しい cpp ファイルで vim を再起動し、:messages を確認しました - 動作しました。
それが役立つことを願っています。