ctags忽略libc6,libstdc ++和boost的列表

我使用带有vim的ctags和OmniCppComplete插件。目前,当生成我的标签时,我会为每个库单独执行。对于libc6,我在处理过程中使用以下名为libc6-ignore的文件中的标记/宏列表来忽略:
__attribute__
__attribute_deprecated__
__attribute_format_arg__
__attribute_format_strfmon__
__attribute_malloc__
__attribute_noinline__
__attribute_pure__
__attribute_used__
__attribute_warn_unused_result__
__wur
__THROW
__nonnull+
我错过了我应该忽略的任何其他令牌,在为libstdc ++和boost生成标签时,我是否应该使用相同的列表或不同的列表? 对于任何感兴趣的人,我使用以下代码生成我的标记文件:
# First make sure apt-file is install and then do:

$ sudo apt-file update

# set up tags for libc, the standard C library

$ apt-file list libc6-dev | grep -o '/usr/include/.*.h'> ~/.vim/tags/libc6-filelist
$ ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -I./libc6-ignore -f ~/.vim/tags/libc6 -L ~/.vim/tags/libc6-filelist 

# create tags for stdlibc++ and STL

$ apt-file list libstdc++6-4.4-dev | grep -E -o '/usr/include/.*.(h|hpp)' > ~/.vim/tags/stdlibcpp-filelist
$ ctags --sort=foldcase -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/stdlibcpp -L ~/.vim/tags/stdlibcpp-filelist

# For Boost

$ apt-file list boost | grep -E -o '/usr/include/.*.(h|hpp)' | grep -v '/usr/include/boost/typeof/' > ~/.vim/tags/boost-filelist
$ ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/boost -L ~/.vim/tags/boost-filelist 
    
已邀请:
您还可以使用修改后的libstdc ++库: http://www.vim.org/scripts/script.php?script_id=2358 这包含一个适用于ctags的C ++头文件的剥离版本。 我制作了一个Python脚本,它从标签文件中提取以下划线开头的所有标签。您可以使用此脚本选择要排除的标记。 您可以随意定制脚本以满足您的需求或建议其他任何内容:
import re

tags=open('tags','r')
output=open('exclude','w')
regex=re.compile('^_[a-zA-Z0-9_]*')
results=set()

for line in tags:
    result=regex.match(line)
    if(result!=None):
        results.add(result.group(0))

tags.close()

for element in sorted(results):
    output.write('{0}n'.format(element))

output.close()
    
我已按照这些说明操作,我可以获得所有增强提升参考值,即
#include <iostream>
我可以直接跳到iostream 然而,我仍然缺少的是例如
#include <stdio.h>
虽然在我的生成脚本中,我已经包含了你提到的
$ apt-file list libc6-dev | grep -o '/usr/include/.*.h'> ~/.vim/tags/libc6-filelist
$ ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -I./libc6-ignore -f ~/.vim/tags/libc6 -L ~/.vim/tags/libc6-filelist 
每当我尝试转到stdio.h时生成标签“libc6”文件后,它会说“E426:tag not found:stdlib”。 这是我在.vimrc中另外包含的内容,以便使所有这3个标记文件可见。
set tags+=~/.vim/tags/boost
set tags+=~/.vim/tags/libc6
set tags+=~/.vim/tags/stdlibcpp
我不是专家但是我可以说这在某种程度上有助于提升但不适用于libc6-dev。有人可以帮我解决问题 这是与上面相同的代码 sudo apt-file update
# set up tags for libc, the standard C library

apt-file list libc6-dev | grep -o '/usr/include/.*.h'> ~/.vim/tags/libc6-filelist
ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -I./libc6-ignore -f ~/.vim/tags/libc6 -L ~/.vim/tags/libc6-filelist

apt-file list libstdc++6-4.6-dev | grep -E -o '/usr/include/.*.(h|hpp)' >> ~/.vim/tags/stdlibcpp-filelist
ctags --sort=foldcase -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/stdlibcpp -L ~/.vim/tags/stdlibcpp-filelist

# For Boost
apt-file list boost | grep -E -o '/usr/include/.*.(h|hpp)' | grep -v '/usr/include/boost/typeof/' > ~/.vim/tags/boost-filelist
ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/boost -L ~/.vim/tags/boost-filelist
    
对不起 - 我之前从未使用过ctags - 但我会抓住这个问题。 如果我理解正确,您可以使用GCC本身的关键字列表。我在
gcc/gcc/c-family/c-common.c
里找到了这个https://gist.github.com/959484。看起来它包含所有C(c / c ++ / obj-c变体)的保留字。我猜有些对所有编译器都有效,当然这些都适用于gcc。 至于找出要忽略的其他符号,在OS X上我会使用nm来转储有问题的库的符号,将所有标记为private('s'而不是'S'的符号)添加到我的符号列表中无视。 Linux有类似的库转储工具吗? 希望这很有用。     
我有自己的清单,从未想过添加你已经列出的内容! 这是我提出的更新的libc6忽略列表(Ubuntu 14.04和GCC 4.8.4),用作ctags的-I选项的输入:
__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
我还创建了以下忽略列表,用于为libstdc ++生成标记文件(Ubuntu 14.04上的GCC 4.8.2)(同样,这是-I选项的输入):
_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_ALGO
_GLIBCXX_END_NAMESPACE_ALGO
_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_GLIBCXX_END_NAMESPACE_CONTAINER
_GLIBCXX_BEGIN_EXTERN_C
_GLIBCXX_END_EXTERN_C
_GLIBCXX_VISIBILITY+
_GLIBCXX_PURE
_GLIBCXX_CONST
_GLIBCXX_NORETURN
_GLIBCXX_CONSTEXPR=constexpr
_GLIBCXX_USE_CONSTEXPR=constexpr
_GLIBCXX_THROW_OR_ABORT+
_GLIBCXX_NOEXCEPT
_GLIBCXX_USE_NOEXCEPT
_GLIBCXX_THROW+
_GLIBCXX_NOTHROW
我改变
__attribute__
为:
__attribute__+
表示它看起来像一个函数,应该被忽略。 当然,我也为Boost创建了一个,但我认为在某人有需要之前我不会发布它。     

要回复问题请先登录注册