我已经使用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
只要可以简单地编译源代码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
标志,警告就很有用。