2014-08-31 108 views
6

我已經得到了帶有YouCompleteMe插件的Vim(用於C語言語言的語義支持編譯),我用它來編寫Python等。現在我想用C來嘗試它(我從來沒有用C開發過,所以我對某些細節有點模糊的想法,比如必要的標誌。)Vim + YouCompleteMe + C:最小化.ycm_extra_conf.py?

要使用YCM的語義完成特性與C,我需要爲它提供一個.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相關,是否正確?

+1

你不能試試嗎? – romainl 2014-08-31 16:32:20

回答

1

只要源碼可以通過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

最新的鏗鏘聲(4.9)已經默認爲c11和C++ 11,所以你不應該需要那些。

所以你只需要任何-I標誌和警告是有用的。

2

爲了給你一個工作的例子,下面是我用於Arduino項目的配置。

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

flags我已經把IDE提供和編譯我的代碼所需要的所有的Arduino庫。

我也寫了一個小函數來找到我在我的項目中使用的/lib目錄中的其他庫,並將它們自動添加到flags。這是line 57

如果您使用大量庫並且不想每次都修改您的conf文件,這會很有幫助。

如果沒有-I /path/to/lib/folder,您將無法自動完成。

希望這有助於:)

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

+0

如果您使用的是C++,請添加'C++'標誌而不是'c'。否則它會告訴你「你不能使用拋出,禁用例外」和其他奇怪的錯誤。 – 2017-10-11 01:47:40