10

Github の紹介に従って、Vim、Vundle、およびYouCompleteMeプラグインをコンパイルしてインストールしました。しかし、私の Vim では YouCompleteMe プラグインがうまく動作しません。変数の名前を自動補完できますが、STL オブジェクト (ベクトル、マップ) の操作を自動補完しません。クラスの「this->」をオートコンプリートすることさえできません。いつも「(^U^N^P) パターンが見つかりません」と表示されます。皆さん、これを見たことがありますか?Ubuntu 12.04 を使用しています。私は何をすべきか?

4

2 に答える 2

6

プラグインの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 関数から返されるフラグのリストに追加する必要があります。

対応する問題を確認することもできます

于 2013-12-13T02:53:25.203 に答える
3

私も答えを探してここに来ました。私はPythonを知らず、これまで何かをハッキングしたことはありません。だからここに私がそれについて行った方法があります。

  1. エラー メッセージを見つけます。私は ~/.vim/bundle/YouCompleteMe に行き、 "builtin includes" を grep しました。なんで?それはエラーメッセージの一部であるため

    • を。そこに見つからなかったので、より高いレベル(cd ..)に移動して繰り返しました。
    • b. 以下を参照してください。/vundle/plugin/libclang.py: print "WARNING: NxD libclang can't find the builtin includes."
  2. このファイルが実行されていることを確認するためにエラー メッセージを修正しました (私のイニシャル NxD) - 動作しました。

  3. メッセージはinitClangCompleteによって出力されます
  4. この呼び出しの後にメッセージが出力される builtinHeaderPath = getBuiltinHeaderPath(library_path) したがって、builtinHeaderPath をさらに詳しく調べます。
  5. 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 などで動作することも以前に指摘しました (最初に「組み込みインクルード」メッセージが画面に表示された方法です)。

  6. また、いくつかの 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
    
  7. files[-1] の予想される動作は、作成者が意図したものではないことに気付き、if 条件の後に変更を加えて変更しませんでした。

  8. 新しい cpp ファイルで vim を再起動し、:messages を確認しました - 動作しました。

    それが役立つことを願っています。

于 2013-04-06T09:47:09.590 に答える