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

kek*_*nen 8 c vim clang

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

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

以下(基于前述.ycm_extra_conf.py)会为C产生"最小工作设置"(我可以指出g:ycm_global_ycm_extra_conf):

flags:

flags = [
'-Wall', '-Wextra', '-Werror',
'-std=c11',
'-x', 'c'
]
Run Code Online (Sandbox Code Playgroud)

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

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

小智 6

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

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
  }
Run Code Online (Sandbox Code Playgroud)

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


Jan*_*dec 3

只要可以简单地编译源代码clang++ -c source(c 与 c++ 由扩展决定),就没有什么是完全有效的。YCM 很高兴地完成了在随机目录中为我创建的临时测试。

不需要-x c。如果源具有扩展名.c.h,则假定为 C,如果其扩展名为.C, .cc, .cpp, .cxx, .H, .hh,.hpp或 则.hxx假定为 C++。仅当您有 C++ 标头且仅包含.h您需要的-x c++-header.

最新的 clang (4.9) 已经默认为 c11 和 c++11,因此您也不应该需要它们。

所以你只需要任何-I标志,警告就很有用。