Это отличный вопрос, серый волк!
Я использовал этот подход годами и вот как я его использую:
- Создайте файл тегов для логического компонента, которыйваша система использует.Логическим компонентом обычно является то, что вы можете считать импортом на других языках (то есть я использую OpenGL или некоторую звуковую библиотеку).
- Для данного логического компонента вам, возможно, придется игнорировать некоторый текст взаголовочный файлЭто сделано для того, чтобы не дать программе ctags неверно интерпретировать определенные конструкции и, таким образом, неправильно представить эти конкретные теги в сгенерированном файле (например, макросы препроцессора или директивы компилятора) или даже вообще не помещать их в выходной файл .
- Измените переменную path Vim, указав по порядку файлы, которые вы создали.Я выбираю самый внутренний шаблон.Сначала сам код проекта, затем библиотеки внутри проекта, затем отдельные системные библиотеки, а затем, наконец, конечный файл тегов, представляющий «все остальное».
У меня обычно есть один файл тегов дляЗаголовки ANSI C (или C ++, если вы используете их вместо этого) соответствуют определенному стандарту (обычно c99. C ++ 11, если вы используете C ++), который обычно является моим файлом тегов «все остальное».
Самый сложныйчасть подает в списке игнорирования ctags.Поскольку вы используете C, я предполагаю, что вы используете заголовки C из системы (только стандартные для компилятора, которые должны быть доступны с языком).Я использую следующий список игнорирования для того, когда я их генерирую (в Ubuntu 14.04):
__attribute__
__attribute_deprecated__
__attribute_format_arg__+
__attribute_format_strfmon__+
__attribute_malloc__
__attribute_noinline__
__attribute_pure__
__attribute_used__
__attribute_warn_unused_result__
__attribute_alloc_size__+
__attribute_const__
__attribute_artificial__
__wur
__THROW
__THROWNL
__BEGIN_DECLS
__END_DECLS
__BEGIN_NAMESPACE_STD
__END_NAMESPACE_STD
__USING_NAMESPACE_STD+
__BEGIN_NAMESPACE_C99
__END_NAMESPACE_C99
__USING_NAMESPACE_C99+
__warndecl+
__warnattr+
__errordecl+
__flexarr=[]
__fortify_function
__REDICRECT+
__REDIRECT_NTH+
__REDIRECT_NTHNL+
__ASMNAME+
__ASMNAME2+
__nonnull+
__always_inline
__extern_inline=extern
__extern_always_inline=extern
__extension__
__restrict
__restrict_arr
Это самая важная часть.Если вы не видите большого количества выходных данных для заголовков, на которых вы запускаете ctags, возможно, именно это и происходит.Это сводило меня с ума, пока я не понял это.Они не дадут обмануть ctags.
Поскольку заголовки вводятся в ctags, у вас есть правильная идея.Не забывайте специфичные для компилятора системные заголовки, которые обычно находятся где-то еще, например / usr / include / x86_64-linux-gnu.Это поможет вам перейти к константам вашей системы при необходимости.