2013-03-07 117 views
10

我刚刚根据Github上的介绍编译并安装了Vim,Vundle和YouCompleteMe插件。 但是,YouCompleteMe插件在我的Vim中无法正常工作。它可以自动完成变量的名称,但不会自动完成STL对象(矢量,地图)的操作。它甚至不能在课堂上自动完成“this->”。它总是告诉我“(^ U^N^P)模式未找到。” 你们有没有看过这个? 我使用Ubuntu 12.04。 我该怎么办?My YouCompleteMe Vim插件不支持STL

+3

你能确认你已经安装了所有的依赖关系?你究竟遵循了哪些步骤?你遵循什么教程(“超级快”或“完整”)?你为什么要问这个非常通用的网站而不是YCM自己的问题追踪器? – romainl 2013-03-07 08:31:52

+0

我也有一些麻烦让YCM工作。我做了一个快速安装。试图挖掘它现在没有工作,现在有点失去了如何解决YCM的问题。有很多部分我不明白。你能提出一些关于如何排除故障的建议@romaini! – Prospero 2013-03-20 08:54:15

+0

@romainl我编译了很长的路,仍然有麻烦,然后看着ycm配置文件,并意识到这是我遇到的问题。我不知道我的标准库在哪里=。 – Prospero 2013-03-20 20:40:13

回答

2

我来到这里寻找答案,我不知道python,从来没有黑客攻击过其他东西。所以这是我如何去做的。

  1. 找到错误信息。我去了〜/ .vim/bundle/YouCompleteMe,并且为“内建包含”进行了grep。为什么?因为这是错误信息的一部分

    • a。我没有找到它,所以去了一个更高的水平(CD ..)并重复。
    • b。发现它看到下面 ./vundle/plugin/libclang.py:print“警告:NxD libclang无法找到内置包含。”
  2. 修改错误消息,以确保该文件正在运行(我的姓名缩写NxD) - 工作。

  3. 该消息由initClangComplete
  4. 这个调用 builtinHeaderPath = getBuiltinHeaderPath(LIBRARY_PATH) 因此我们深入钻研builtinHeaderPath
  5. getBuiltinHeaderPath之后打印的打印信息上运行公知的目录的循环。我有2铛装置

    • a。 〜/下载目录 - 世界上所有软件都被转储的地方
    • b。在/ usr /地方,因为我想我克隆,编译和生成

    我加入这两个路径此阵的最新铛:我注意的是“”是的分离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. 我意识到文件的预期行为[-1]是作者的意图不是和修改了它,如果条件后保持不变。

  8. 用一个新的cpp文件重新启动vim,并看着:messages - 它工作。

    希望有所帮助。

6

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

这是由libclang引起的问题。从clang编译二进制使用正确的默认头搜索路径,但从libclang.so编译不。这个问题似乎比其他操作系统更受影响。看来OS X Mavericks尤其有这方面的问题。

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

你可能也想看看相应的issue