我根据Github上的介绍编译并安装了Vim,Vundle和YouCompleteMe插件。 但是YouCompleteMe插件在我的Vim中效果不佳。它可以自动完成变量的名称,但不会自动完成STL对象(矢量,地图)的操作。它甚至无法自动完成“this->”在课堂上。它总是告诉我“(^ U ^ N ^ P)模式未找到。” 你们之前见过这个吗? 我使用的是Ubuntu 12.04。 我该怎么办?
答案 0 :(得分:6)
插件的github repo上的自述文件现在解决了这个问题。
这是由libclang的问题引起的。从clang编译二进制文件使用正确的默认标头搜索路径,但从libclang.so编译不会。这个问题似乎比其他操作系统更能影响某些操作系统。看起来OS X Mavericks尤其存在问题。
目前的解决方法是调用echo | clang -v -E -x c ++ - 并查看#include< ...>下的路径搜索从这里开始:标题。您应该使用这些路径,在每个单独的路径前加上系统,并将它们全部附加到从.ycm_extra_conf.py文件中的FlagsForFile函数返回的标志列表中。
您可能还想查看相应的issue
答案 1 :(得分:3)
我来到这里寻找答案,我不知道python,从来没有破解别的东西。所以这就是我如何去做的。
查找错误消息。我去了〜/ .vim / bundle / YouCompleteMe并且为“builtin includes”而努力。为什么?因为这是错误信息的一部分
修改错误消息以确保正在运行此文件(我的姓名缩写NxD) - 工作。
getBuiltinHeaderPath在已知目录上运行循环。我有2个铿锵声装置
我添加了这个数组的路径: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中数组元素的分隔符。 我之前也注意到打印 - >在python中输出一条消息,参数是c-style%s,%d等工作 - (这就是首先在屏幕上出现“内置包含”消息的方式)
我还将一些打印语句转储到循环中,所以看看它看到了什么以及它在做什么。
部分代码修改函数“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
我意识到文件[-1]的预期行为不是作者想要的,并且在if条件之后修改它以保持不变。
使用新的cpp文件重新启动vim并查看:messages - 它工作正常。
希望有所帮助。