Vim + YouCompleteMe + C:最小的.ycm_extra_conf.py?

时间:2014-08-31 15:45:30

标签: c vim clang

我已经使用YouCompleteMe插件获得了Vim(使用C语言语言的语义支持编译),我将其用于Python等。现在我想用C语言尝试(我以前从未用C开发过) ,所以我对某些细节有一点模糊的想法,比如必要的标志。)

要在Y中使用YCM的语义完成功能,我需要提供一个.ycm_extra_conf.py文件; YCM用户指南指向YCM自己的.ycm_extra_conf.py作为参考(link)。

以下(基于上述.ycm_extra_conf.py)会为C产生“最小工作设置”(我可以指向g:ycm_global_ycm_extra_conf):

flags

flags = [
'-Wall', '-Wextra', '-Werror',
'-std=c11',
'-x', 'c'
]

FlagsForFile功能没有final_flags.remove( '-stdlib=libc++' )行。

否则示例文件将保持原样。我相信-isystem标志与YCM严格相关,这是正确的吗?

3 个答案:

答案 0 :(得分:4)

我也在寻找这个,似乎在这里我们没有得到一个好的解决方案。即使这是一个非常古老的问题,我希望这可能对某人有所帮助。以下适用于我,

import os
import ycm_core

flags = [
  '-Wall',
  '-Wextra',
  '-Werror',
  '-Wno-long-long',
  '-Wno-variadic-macros',
  '-fexceptions',
  '-ferror-limit=10000',
  '-DNDEBUG',
  '-std=c99',
  '-xc',
  '-isystem/usr/include/',
  ]

SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', ]

def FlagsForFile( filename, **kwargs ):
  return {
  'flags': flags,
  'do_cache': True
  }

顺便说一下,默认的长配置文件让我非常困扰。我应该赞扬这篇文章,http://cocoaspice.logdown.com/posts/302432-youcompleteme-toss-notes

答案 1 :(得分:2)

为了给您一个工作示例,这是我用于Arduino项目的配置。

https://github.com/WeAreLeka/Bare-Arduino-Project/blob/master/.ycm_extra_conf.py

flags我已经放置了IDE提供的所有Arduino库,需要编译我的代码。

我还编写了一个小功能,可以在我的/lib目录中查找我在我的项目中使用的其他库,并将其自动添加到flags。它是line 57

如果您使用大量的库并且不想每次都修改您的配置文件,这会很有帮助。

如果没有-I /path/to/lib/folder,您就无法获得自动完成功能。

希望这会有所帮助:)

答案 2 :(得分:1)

只要简单地clang++ -c source编译源代码就完全无效(c vs. c ++由扩展决定)。 YCM愉快地完成了在随机目录中为我创建的临时测试。

不需要-x c。如果来源有扩展名.c.h,则会假定它是C,如果它有扩展名.C.cc.cpp,{{1} },.cxx.H.hh.hpp假定为C ++。只有当您的C ++标题只有.hxx时才需要.h

最新的clang(4.9)已经默认为c11和c ++ 11,所以你也不需要它们。

所以你只需要任何-x c++-header标志,并且警告很有用。