最近,我安装了它YouCompleteMe
,我是它的新用户。我从此链接阅读了安装说明:http://valloric.github.io/YouCompleteMe。现在,我可以将它用于 python 等,但不能将它用于 C。我不明白链接中这句话的意思:"forget that if you want the C-family semantic completion engine to work, you will need to provide the compilation flags for your project to YCM."
我阅读了 YCM 用户指南,但无法解决我的问题。谢谢任何人向我解释上述句子的含义以及我该怎么办?
答案1
您需要有一个名为.ycm_extra_conf.py在包含项目源代码的目录中。该链接指向插件提供的示例文件,您必须更新它以正确描述您的编译选项。
我通常为一个项目创建一个(或多个)并将它们与项目一起提交到我正在使用的任何 scm 程序中。
需要注意以下几点:
如果您习惯使用 gcc,那么有些编译标志 clang(YCM 正在使用的)不支持。
如果您正在编译 Linux 内核代码(驱动程序等),它将无法正常工作,因为 clang 不支持 gcc 提供的许多汇编宏。我不知道有什么解决方法。
附加信息来自开发者:
C 系列语义补全
YCM 在打开的文件的目录中或层次结构中其上方的任何目录中查找 .ycm_extra_conf.py 文件(递归);找到文件后,将其加载(仅一次!)作为 Python 模块。YCM 调用该模块中的 FlagsForFile 方法,该方法应为其提供编译当前文件所需的信息。您还可以提供全局 .ycm_extra_conf.py 文件的路径,该文件将用作后备。为了防止从您未编写的文件中执行恶意代码,YCM 会针对每个 .ycm_extra_conf.py 询问您一次是否可以安全加载。可以禁用此功能,您可以将文件列入白名单/黑名单。有关更多详细信息,请参阅选项部分。
有关其工作原理的详细信息,请参阅 YCM 自己的 .ycm_extra_conf.py。您应该能够将其用作起点。不要只是将该文件复制/粘贴到某个地方并期望事情会神奇地起作用;您的项目需要不同的标志。提示:只需将 flags 变量中的字符串替换为项目所需的编译标志。这对于 99% 的项目来说应该足够了。
如果您已修改此文件并将其添加到您的项目中(或提供了它的路径),您将不会收到与原始问题相同的错误消息。如果这样做,YCM 无法看到它 - 可能命名不正确(以 . 开头)或不在源层次结构的正确级别 - 请参阅上面的链接。
否则,如果它仍然不起作用,您应该会收到不同的错误消息;发布该消息。初始 YCM 配置需要一些工作,并且第一次需要浏览他们的文档几次。
答案2
我不明白链接中这句话的意思:“忘记了如果您希望 C 系列语义完成引擎工作,您将需要向 YCM 提供您的项目的编译标志。”
这只是意味着编译时不要像这样
cd ~/.vim/bundle/YouCompleteMe ./install.py
您需要添加
cd ~/.vim/bundle/YouCompleteMe ./install.py --clang-completer
我认为安装说明无论如何都会更新以反映上述内容。