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

我使用vim和OmniCppComplete插件的ctags。 目前在生成我的标签时,我为每个库单独执行。 对于libc6,我在名为libc6-ignore的文件中使用以下列表中的标记/macros来在处理期间忽略:

__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 ++和提升?

对于任何有兴趣的人,我使用以下来生成我的标记文件:

 # 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 

Solutions Collecting From Web of "ctags忽略libc6,libstdc ++和boost的列表"

您也可以使用修改后的libstdc ++库:

http://www.vim.org/scripts/script.php?script_id=2358

这包含一个剥离版本的C ++头文件,它适用于ctags。

我做了一个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> 

虽然在我生成的脚本中,我已经包括你所提到的ie

 $ 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:标签找不到:stdlib”。

这是我为.vimrc添加的内容,以使所有这3个标签文件可见。

 set tags+=~/.vim/tags/boost set tags+=~/.vim/tags/libc6 set tags+=~/.vim/tags/stdlibcpp 

我不是一个专家,但是我可以说,这个工作以某种方式提升,但不是libc6-dev。 有人可以帮助我的解决方案

这里是与上面相同的代码

sudo apt-file更新

 # 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上,我会使用纳米转储的问题图书馆的符号添加所有符号标记为私人('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创建了一个,但是我想我不会发布它,直到有人需要。