2012-05-24 10 views
5

El estándar GNU etags no admite una caminata recursiva de directorios como lo hace el exuberante ctags -R. Si solo tengo acceso a los etags GNU, ¿cómo puedo usar bash shell magic para obtener etags para producir una tabla TAGS para todos los archivos C++ *.cpp y *.h en el directorio actual y todos los directorios debajo del actual recursivamente para crear un TAGS tabla en el directorio actual que tiene el nombre de ruta correcto para emacs para resolver las entradas de la tabla TAGS.¿Cómo usar magia de concha para crear un etags recursivo usando GNU etags?

+0

¿Cómo es eso? ¿"solo tienes acceso a los etags de GNU"? Ctags exuberantes está disponible gratuitamente para muchas plataformas. ¿No puedes instalarlo? –

+0

El empleador no quiere que se instale un software no autorizado, preferiría no luchar contra eso si puedo evitar el uso de 'etags' proporcionados. – WilliamKF

Respuesta

12

El Emacs Wiki suele ser una buena fuente de respuestas a problemas comunes o mejores prácticas. Para su problema específico no es una solución para Windows y Unices:

http://www.emacswiki.org/emacs/RecursiveTags#toc2

Básicamente se ejecuta un comando para buscar todas las .cpp y todas .h archivos (selectores de cambio de archivo si utiliza diferentes terminaciones de archivo, como por ejemplo, , .C) y canalizar el resultado en etags. Como Windows no parece tener xargs, necesita una versión más reciente de etags que pueda leer de stdin (observe el guión al final de la línea que simboliza stdin). Por supuesto, si usa una versión reciente de etags, también puede usar el parámetro del guión en lugar de xargs.

de Windows:

cd c:\source-root 
dir /b /s *.cpp *.h *.hpp | etags --your_options - 

Unix:

cd /path/to/source-root 
find . -name "*.cpp" -print -or -name "*.h" -print | xargs etags --append 
0

Use find. hombre encuentra si es necesario.

+1

y hombre xargs también, apuesto. . . . . o simplemente instala exuberante y usa sus etags ... – jthill

+0

¿Por qué utilizar xargs cuando hay '-exec command +'? – jordanm

1

Este comando crea un archivo etags con "tags" por defecto de nombre para .c, .cpp, .cpp .hpp, .Hpp .h archivos recursivamente

find . -regex ".*\.[cChH]\(pp\)?" -print | etags - 
Cuestiones relacionadas