簡體   English   中英

.ycm_extra_conf.py和旺盛的Ctags有什么關系

[英]What is the relation between .ycm_extra_conf.py and Exuberant Ctags

我目前正在將基於C ++的IDE從XCode切換到Vim。 我一直在閱讀有關Vim插件“ YCM”的信息,它要求源目錄中存在.ycm_extra_conf.py。 我正在使用YCM Generator生成.ycm_extra_conf.py和Ctags以生成標簽。 我的問題是什么使用標簽? YCM對Ctags有什么用(哪個收集了有關代碼的所有定義和重要信息)? YCM是否以任何方式使用CTags生成的標簽? .ycm_extra_conf.py的生成是否需要存在標簽?

我會說YCM不需要標簽數據庫。 如果您已經編譯它依賴於clang解析器,那么您將獲得非常聰明的完成。 沒有標簽,多虧了標簽,您會得到比沒有更好的東西。

否則,大多數其他插件都依賴標簽數據庫來完成各種工作。 例如,標簽將顯示系統中標簽的結構化輪廓。 lh-cppvim-refactor中,我在最后一刻建立了一個標記庫,以便推斷出父母,孩子,成員,跳轉/生成函數定義等。

您必須知道,使用標簽無法實現像使用基於clang的插件所能實現的那樣聰明。 生成標簽的速度實際上要快得多(但是YCM在后台運行,以及標簽生成的插件,例如easytags(IIRC),Gutentag和lh-tags v2(我維護))。 不幸的是,他們錯過了可能的信息。 特別是當我們使用不太活躍的豐富的ctags時,我強烈建議使用通用ctags來解析C ++代碼,它甚至可以理解C ++ 11的構造。

如果您的.ycm_extra_conf.py設置正確,則不需要ctags。

如果let g:ycm_collect_identifiers_from_tags_files = 1並使用選項--fields=+l生成ctags,則YCM會識別出這些ctags並將所有標簽作為標識符完成,這在語義上是不准確的。 大的ctags文件會占用大量內存。 因此,不建議使用ctags。

編輯:

YCM使用clang作為語義后端。 .ycm_extra_conf.py設置所需的clang標志。 您可以生成編譯數據庫,但是在添加新文件時,需要重新創建編譯數據庫。

注意.ycm_extra_conf.py是一個python文件,因此您也可以動態生成標志。 在我的開發中,大多數標志是相同的,但是包含標志會更改。 因此,我使用全局.ycm_extra_conf.py生成用於在項目中包括所有.h文件的標志。 這樣,通常我不需要創建.ycm_extra_conf.py ,所有完成和goto函數都可以正常工作。

您可以下載我的全局.ycm_extra_conf.py ,並更改一些固定標志作為您的喜好,然后將其放置到項目根目錄或將其設置為全局,這樣您就可以完成工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM