10

我刚刚按照 Github 上的介绍编译安装了 Vim、Vundle 和YouCompleteMe插件。但是 YouCompleteMe 插件在我的 Vim 中不能很好地工作。它可以自动完成变量的名称,但它不会自动完成 STL 对象(向量、映射)的操作。它甚至不能自动完成课程中的“this->”。它总是告诉我“(^U^N^P)找不到模式。” 你们以前见过这个吗?我使用 Ubuntu 12.04。我应该怎么办?

4

2 回答 2

6

该插件的github repo上的自述文件现在解决了这个问题。

这是由 libclang 的问题引起的。从 clang 编译二进制文件使用正确的默认头文件搜索路径,但从 libclang.so 编译则没有。这个问题似乎对某些操作系统的影响比其他操作系统更大。似乎 OS X Mavericks 尤其在这方面存在问题。

当前的解决方法是调用 echo | clang -v -E -x c++ - 并查看 #include <...> 搜索从此处开始的路径:标题。您应该采用这些路径,将 -isystem 添加到每个单独的路径,并将它们全部附加到您从 .ycm_extra_conf.py 文件中的 FlagsForFile 函数返回的标志列表中。

您可能还想查看相应的问题

于 2013-12-13T02:53:25.203 回答
3

我也来这里寻找答案,我不知道 python 并且以前从未破解过其他东西。所以这就是我的做法。

  1. 查找错误消息。我去了 ~/.vim/bundle/YouCompleteMe 并寻找 "builtin includes" 。为什么?因为那是错误信息的一部分

    • 一个。我没有在那里找到它,所以去了更高的级别(cd ..)并重复。
    • 湾。发现它见下文./vundle/plugin/libclang.py:打印“警告:NxD libclang 找不到内置包含。”
  2. 修改错误消息以确保该文件正在运行(我的姓名缩写 NxD) - 有效。

  3. 该消息由 initClangComplete 打印
  4. 在此调用 builtinHeaderPath = getBuiltinHeaderPath(library_path) 之后打印消息,因此我们深入研究 builtinHeaderPath
  5. getBuiltinHeaderPath 在已知目录上运行一个循环。我有 2 个 clang 安装

    • 一个。~/Downloads 目录 - 世界上所有软件都被转储的地方
    • 湾。/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. 我还将一些打印语句转储到循环中,以便查看它看到了什么以及它在做什么。

    部分代码修改函数“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 回答