c++ linux vim boost ctags

c++ - Generando una base de datos de ctags razonable para Boost



linux vim (3)

DEBERÍAS agregar esta opción a tu invocación de ctags:

-I "BOOST_SYMBOL_VISIBLE BOOST_SYMBOL_IMPORT BOOST_SYMBOL_EXPORT BOOST_FORCEINLINE BOOST_CONSTEXPR=constexpr BOOST_CONSTEXPR_OR_CONST=constexpr BOOST_STATIC_CONSTEXPR=static/ constexpr BOOST_STD_EXTENSION_NAMESPACE=std BOOST_MOVABLE_BUT_NOT_COPYABLE+ BOOST_COPYABLE_AND_MOVABLE+ BOOST_COPYABLE_AND_MOVABLE_ALT+ BOOST_NOEXCEPT=noexcept BOOST_NOEXCEPT_OR_NOTHROW=noexcept BOOST_NOEXCEPT_IF+ BOOST_NOEXCEPT_EXPR+ BOOST_STATIC_CONSTANT BOOST_DELETED_FUNCTION BOOST_DEFAULTED_FUNCTION BOOST_NESTED_TEMPLATE BOOST_UNREACHABLE_RETURN+ BOOST_DEDUCED_TYPENAME=typename BOOST_CTOR_TYPENAME=typename BOOST_LIKELY+ BOOST_UNLIKELY+ BOOST_ALIGNMENT+ BOOST_FALLTHROUGH"

Esto es lo que uso para el subdirectorio TODO / usr / include / boost para Boost 1.55. Obtengo un archivo de etiquetas que es ~ 128MB. La -I parece ser la clave aquí y ayuda a filtrar la generación de etiquetas espurias.

NOTA: Estoy usando ctags 5.9 en Ubuntu 14.04. Tengo un especial -I para generar ctags para los encabezados estándar de C ++. Esto me tomó un tiempo para descubrir por qué algunos archivos de encabezado generaban casi ninguna etiqueta, mientras que otros generaban enormes cantidades de etiquetas.

Estoy ejecutando Ubuntu 8.04 y ejecuté el comando:

$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/stdlibcpp /usr/include/c++/4.2.4/

para generar una base de datos ctags para la biblioteca estándar de C ++ y STL (libstdc ++) en mi sistema para usar con el script OmniCppComplete vim. Esto me dio un muy razonable archivo de etiquetas de 4MB que parece funcionar bastante bien.

Sin embargo, cuando ejecuté el mismo comando contra los encabezados de Boost instalados:

$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/boost /usr/include/boost/

¡Terminé con un archivo de etiquetas de 1.4 GB! Todavía no lo he probado, pero parece que me gusta, va a ser demasiado grande para ser útil. ¿Hay alguna manera de obtener un archivo de etiquetas más delgado y más útil para mis encabezados de Boost instalados?

Editar

Solo como una nota, libstdc ++ incluye TR1, que tiene asignados libs de Boost. Así que debe haber algo extraño para que libstdc ++ salga con un archivo de etiquetas de 4 MB y Boost para terminar con un archivo de etiquetas de 1.4 GB.

Acabo de encontrar esto en la lista de correo de Boost:

Boost-usuarios Boost y autocompletado

LA RESPUESTA

Gracias a Neg_EV por descubrir cuál era el problema, pero hay una manera mucho mejor de resolver el problema de lo que sugirió:

Asegúrese de que apt-file es install, y ejecute los siguientes comandos

(Guardo las etiquetas de mi biblioteca en ~ / .vim / tags /):

$ sudo apt-file update $ 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

Me actualicé a Ubuntu 10.04 y Boost 1.40 y eso es en lo que probé esta solución, pero debería funcionar con cualquier versión de Boost hasta donde yo sepa.


Sé que esta publicación es un poco antigua, pero me encontré con el mismo problema. Lo investigué un poco más y parece que es una carpeta en alza la que está causando el problema: typeof . Estoy usando boost 1.37 y mi archivo de etiquetas fue 1.5G, typeof fue 1.4G de eso. Así que acabo de crear un archivo de etiquetas sin ese directorio incluido y el tamaño resultante fue de 70M. Incluso pude ordenarlo sin quedarse sin espacio :) Imagino que en las versiones más nuevas de boost pueden ser otros proyectos que son demasiado grandes, sin embargo, la solución general que encontré es esta ...

  1. Genere un archivo de etiqueta para cada carpeta de boost por separado, un simple bash for loop debería ser capaz de hacer esto.
  2. Mira cuáles son demasiado grandes.
  3. Cree un nuevo archivo de etiquetas individuales que excluya esos directorios grandes o mantenga los archivos de etiquetas separados simplemente eliminando los que son demasiado grandes.

Este es el script que utilicé (tomado de los comentarios):

for i in $(find -maxdepth 1 -type d | grep -v ''^/.$'' | sed ''s//.////'' ); do echo $i; ctags -f ~/tmp_tags/$i.tags -R --c++-kinds=+p --fields=+iaS --extra=+q --languages=c++ --sort=foldcase $i; done

Espero que esto ayude.


usa la opción

--sort=foldcase

Con esto la búsqueda de las etiquetas se vuelve más rápida.

Citando de la página de manual de ctags : "El valor de foldcase especifica la clasificación insensible a mayúsculas y minúsculas. Las búsquedas binarias rápidas de archivos de etiquetas ordenadas con plegamiento de mayúsculas y minúsculas requerirán un soporte especial de herramientas que usen archivos de etiquetas, como la que se encuentra en biblioteca de etiquetas de lecturas ctags o Vim versión 6.2 o superior (usando "set ignorecase"). Esta opción debe aparecer antes del primer nombre de archivo "