ctagsEs un comando de shell que genera un archivo de índice (etiquetas) con identificadores programáticos extraídos de archivos de código fuente de diversos lenguajes de programación para facilitar la comprensión del código . Los editores de código fuente suelen utilizar estas etiquetas para consultar la definición de un identificador mientras el usuario desarrolla el código. Alternativamente, el comando admite un formato de salida que es una referencia cruzada legible para humanos .
La versión original ctagsse introdujo en BSD Unix 2.0 [ 1 ] [ 2 ] y fue escrita por Ken Arnold , con soporte para Fortran por Jim Kleckner y soporte para Pascal por Bill Joy . Forma parte de la versión inicial de Single Unix Specification y XPG4 de 1992.
Soporte del editor
Los archivos de índice de etiquetas son compatibles con muchos editores, entre ellos:
- Átomo
- BBEdit 8+
- CodeLite (a través del servidor de lenguaje ctagsd integrado ) [ 3 ]
- Cloud9 IDE (lo usa internamente pero no lo expone)
- CygnusEd [ 4 ]
- Emacs y XEmacs
- EmEditor Professional
- Administrador de zonas remotas (a través del complemento Ctags Source Navigator)
- Geany
- Gedit (a través del complemento gedit-symbol-browser-plugin )
- JED
- jEdit (a través de los complementos CodeBrowser, Tags, ClassBrowser, CtagsSideKick o Jump)
- JOSÉ
- KDevelop
- Kate
- mcedit (editor integrado de Midnight Commander)
- NEdit
- Bloc de notas++ (mediante el complemento OpenCTags)
- QDevelop
- TSE (vía macro)
- TextMate (a través de CodeBrowser-PlugIn)
- UltraEdit
- TextPad
- VEDIT
- vi (y derivados como Elvis , Nvi , Vim , vil , etc.)
- Visual Studio Code [ 5 ]
- Xedit (X11)
Variantes
Original
El comando original ctagsya no cuenta con soporte, pero su funcionalidad sigue estando disponible a través de programas similares y posiblemente compatibles. En particular, el formato de datos de etiquetas original aún se utiliza con frecuencia.
El formato original, utilizado frecuentemente con vi y sus clones, así como por los programas descendientes modernos Exuberant y Universal Ctags. [ 6 ] Un archivo de etiquetas, normalmente llamado "tags", consta de líneas con el siguiente formato:
{ tagname }\ t { tagfile }\ t { tagaddress }Los campos son:
- {tagname } – Identificador que no contiene espacios en blanco
- \ t – Exactamente un carácter de tabulación ( \ x09 ), aunque muchas versiones de vi pueden manejar cualquier cantidad de espacio en blanco.
- {tagfile } – El nombre del archivo donde se define {tagname }, relativo al directorio actual.
- {tagaddress } – Un comando del modo ex que lleva al editor a la ubicación de la etiqueta. Para protegerse contra la ejecución de comandos arbitrarios (por ejemplo, comandos que modifican archivos), las implementaciones POSIX de vi solo permiten un comando de búsqueda o un número de línea en este lugar.
Las líneas están ordenadas por {tagname }, lo que permite una búsqueda rápida.
Ctags extendidos
El formato utilizado por Exuberant Ctags y Universal Ctags de Vim . Estos programas pueden generar un archivo ctags original o un formato extendido que intenta mantener la compatibilidad con versiones anteriores.
Un archivo consta de líneas con el siguiente formato:
{ tagname }\ t { tagfile }\ t { tagaddress }[;"\ t { tagfield ...}]Los campos hasta {tagaddress } inclusive son los mismos que para el formato ctags original. Los campos adicionales opcionales (indicados entre corchetes) incluyen:
- ;" – punto y coma + comillas dobles: Finaliza la {tagaddress } de una manera que parece el inicio de un comentario para vi o ex
- {tagfield } – campos de extensión: pares "clave:valor" separados por tabulaciones para obtener más información.
Este formato es compatible con vi que no es POSIX, ya que los datos adicionales se interpretan como un comentario. Sin embargo, las implementaciones POSIX de vi deben modificarse para admitirlo. [ 6 ]
etiquetas electrónicas
GNU Emacs viene con dos ctagsvariantes, etagsy ctags, que se construyen a partir del mismo código fuente. etagsgenera un archivo de tabla de etiquetas para Emacs, y ctagscrea un archivo de etiquetas para vi . Algunas opciones (por ejemplo --language) son aceptadas tanto por ctagscomo por etags. Las opciones que solo tienen sentido al generar un archivo de etiquetas al estilo vi no son aceptadas (y por lo tanto se informan como errores) por etags. De manera similar ctags, no acepta opciones que son pertinentes solo para generar un archivo de tabla de etiquetas para Emacs. [ 7 ]
En Emacs, el archivo de etiquetas se suele llamar "TAGS". Este archivo consta de varias secciones , una por cada archivo fuente de entrada. Las secciones son de texto plano con algunos caracteres ASCII no imprimibles que se utilizan para fines especiales. Estos caracteres se representan como códigos hexadecimales subrayados a continuación.
Una sección comienza con un encabezado de dos líneas (los dos primeros bytes forman un número mágico ):
\ x0c { src_file },{ tamaño_de_los_datos_de_definición_de_etiqueta_en_bytes }Nota: \ x## representa el byte en hexadecimal ## . Cada línea termina con un salto de línea (LF, \ n = \ x0A ).
El encabezado va seguido de las definiciones de etiquetas, una definición por línea, con el formato:
{ tag_definition_text }\ x7f { tagname }\ x01 { line_number },{ byte_offset }{tagname} \x01 puede omitirse si el nombre de la etiqueta puede deducirse del texto en la definición de la etiqueta.
Etiquetas C exuberantes
Exuberant Ctags, escrito y mantenido por Darren Hiebert hasta 2009, [ 8 ] se distribuyó inicialmente con Vim , pero se convirtió en un proyecto independiente tras el lanzamiento de Vim 6. Incluye soporte para Emacs y etagscompatibilidad. [ 9 ] [ 10 ]
Exuberant Ctags incluye soporte para más de 40 lenguajes de programación, con la posibilidad de añadir soporte para aún más mediante expresiones regulares .
Etiquetas C universales
Universal Ctags es una bifurcación de Exuberant Ctags, con el objetivo de continuar su desarrollo. Algunos analizadores sintácticos se han reescrito para ofrecer un mejor soporte a los lenguajes. [ 11 ]
Hashtags
Crea un archivo de etiquetas compatible con ctags para archivos fuente de Haskell . [ 12 ] Incluye soporte para crear archivos etags de Emacs. [ 13 ]
jsctags
Una solución compatible con ctags especializada para JavaScript que utiliza el sistema de empaquetado CommonJS . [ 14 ] Supera a Exuberant Ctags para código JavaScript, encontrando más etiquetas que este último. [ 15 ]
Ejemplo
Dado un único código fuente test.c :
#define CCC(x)
El archivo de etiquetas ctags tiene el siguiente aspecto:
CCC( test.c 1
El archivo de etiquetas etags (TAGS) tiene este aspecto:
x0c prueba.c,21 #define CCC(\ x7f CCC\ x01 1,0
Véase también
Referencias
- ↑ "2BSD/man/ctags.u" . www.tuhs.org . Archivado del original el 30-11-2024 . Consultado el 21-10-2024 .
- ↑ "2BSD/src/ctags.sh" . www.tuhs.org . Consultado el 21 de octubre de 2024 .
- ↑ "Protocolo de servidor de lenguaje" . Documentación de CodeLite . Archivado del original el 11 de agosto de 2022. Consultado el 12 de junio de 2022 .
- ↑ "Aminet - dev/C/Ctags.lha" . Archivado del original el 13 de abril de 2021. Consultado el 13 de abril de 2021 .
- ↑ Símbolos del espacio de trabajo archivados el 11/01/2021 en Wayback Machine , documentación de Python para Visual Studio Code
- 1 2 "Propuesta para formato de archivo de etiquetas Vi extendido" . Archivado del original el 12 de junio de 2007. Recuperado el 30 de junio de 2007 .
- ↑ – Manual de comandos generales de Linux de ManKier.com
- ↑ "Ctags exuberantes" . ctags.sourceforge.net . Archivado del original el 13 de agosto de 2025. Consultado el 9 de agosto de 2025 .
- ↑ "Documentación de Vim: versión 6: ctags-gone" . Archivado del original el 3 de mayo de 2007. Consultado el 28 de abril de 2007 .
- ↑ – Manual de comandos generales de Linux de ManKier.com
- ↑ "Documentación universal de Ctags" . Consultado el 2 de agosto de 2018 .
- ↑ "Documentación de GHC: Otros programas de utilidad de Haskell" . Archivado del original el 25 de marzo de 2010. Consultado el 5 de marzo de 2010 .
- ↑ "hasktags: Produce archivos ctags "tags" y etags "TAGS" para programas Haskell" . Archivado del original el 25 de febrero de 2010. Recuperado el 5 de marzo de 2010 .
- ↑ "repositorio de github pcwalton para jsctags" . GitHub . Archivado del original el 22 de agosto de 2010. Consultado el 10 de septiembre de 2016 .
- ↑ Patrick Walton (25 de mayo de 2010). "Presentación de jsctags" . Archivado del original el 1 de junio de 2010. Consultado el 25 de mayo de 2010 .
Enlaces externos
- : crear un archivo de etiquetas – Referencia de Shell y utilidades, Especificación única de UNIX , Versión 5 de The Open Group
- Página principal de Universal Ctags
- Página principal de Exuberant Ctags
- Ctags en VMS
- Código fuente del módulo vtags.el de Emacs
- Herramientas de comprensión de código
- Herramientas de navegación de código
- Herramientas de programación informática gratuitas
- Herramientas de programación Unix
- Programas estándar de Unix
- Utilidades Unix SUS2008
- Software que utiliza la licencia BSD.