我正在Linux下进行C开发,但是我为正确设置ctags以与vim一起工作而感到困惑。 Vim正确注册了tags
文件,并提供了基于文件的补全。
但是,我不确定要获得“必需”的正确方法是什么。目前,我有一些“精选”标题:
AM_CTAGSFLAGS = \
--recurse=yes \
--tag-relative=yes \
--extras=* \
--fields=* \
--c-kinds=* \
--language-force=C \
/usr/include/bits \
/usr/include/fcntl.h \
/usr/include/stdio.h \
/usr/include/stdlib.h \
/usr/include/string.h \
/usr/include/sys \
/usr/include/unistd.h
开始时,我只是放置了与#include ...
相同的标题,但是缺少一些内容(例如/usr/include/bits/...
),所以我添加了这些标题。
但是,这些年来,我觉得某个地方必须有人提出更好的解决方案。那么,通常如何做?
答案 0 :(得分:1)
这是一个很好的问题,灰狼!
多年来我一直在使用这种方法,这是我的使用方法:
我通常为单个ANSI C标头(或C ++,如果使用的是C ++)有一个标签文件,该文件适合于特定标准(通常是c99。如果使用C ++,则为c ++ 11),这通常是我的“其他所有东西” “标记文件。
最困难的部分是将忽略列表提供给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的标头的大量输出,则可能是这种情况。直到我想通了,这让我发疯。那些使ctag不受欺骗。
对于输入到ctags中的标头,您有正确的想法。不要忘记特定于编译器的系统头文件,这些文件头通常位于/ usr / include / x86_64-linux-gnu之类的其他位置。这些将在必要时帮助您深入研究系统常数。