Cтеги
Эта статья нуждается в дополнительных цитатах для проверки . ( ноябрь 2011 г. ) |
Разработчик(и) | Кен Арнольд |
---|---|
Репозиторий | |
Операционная система | Unix и Unix-подобные |
Платформа | Кросс-платформенный |
Тип | Инструмент программирования (в частности: инструмент навигации по коду) |
Лицензия | БСД |
Ctags — это инструмент программирования , который генерирует индексный файл (или файл тегов) имен, найденных в исходных файлах и файлах заголовков различных языков программирования, для облегчения понимания кода . В зависимости от языка функции , переменные , классов члены , макросы могут индексироваться и т. д. Эти теги позволяют быстро и легко находить определения с помощью текстового редактора , системы поиска кода или другой утилиты. В качестве альтернативы существует также режим вывода, который генерирует файл перекрестных ссылок , содержащий информацию о различных именах, найденных в наборе языковых файлов, в удобочитаемой форме.
Оригинальный Ctags был представлен в BSD Unix 3.0 и был написан Кеном Арнольдом при поддержке Fortran Джимом Клекнером и Pascal поддержке Биллом Джоем . Это часть первоначальной версии единой спецификации Unix и XPG4 1992 года.
Редакторы, поддерживающие ctags
[ редактировать ]Индексные файлы тегов поддерживаются многими редакторами исходного кода , в том числе:
- Атом
- BBEdit 8+
- CodeLite (через встроенный языковой сервер ctagsd ) [1]
- Cloud9 IDE (использует его внутри, но не раскрывает)
- CygnusЭд. [2]
- Emacs и XEmacs
- EmEditor Профессиональный
- Far Manager (через плагин Ctags Source Navigator)
- Гиани
- Gedit (через gedit-symbol-browser-plugin )
- ДЖЕД
- jEdit (через плагины CodeBrowser, Tags, ClassBrowser, CtagsSideKick или Jump)
- ДЖО
- КДевелопмент
- Кейт
- mcedit (встроенный редактор Midnight Commander)
- Редактировать
- Notepad++ (через плагин OpenCTags)
- QDevelop
- TSE (через макрос)
- TextMate (через CodeBrowser-PlugIn)
- УльтраПравить
- ТекстПад
- Веди
- vi (и производные, такие как Elvis , Nvi , Vim , vile и т. д.)
- Код Visual Studio [3]
- Кредит (X11)
Варианты ctags
[ редактировать ]Существует несколько других реализаций программы ctags :
Этаги
[ редактировать ]GNU Emacs поставляется с двумя утилитами ctags: etags и ctags, которые скомпилированы из одного и того же исходного кода. Etags генерирует файл таблицы тегов для Emacs, а команда ctags используется для создания аналогичной таблицы в формате, понятном vi . У них есть разные наборы параметров командной строки: etags не распознает и игнорирует параметры, которые имеют смысл только для файлов тегов стиля vi, созданных командой ctags. [4]
Яркие Ctags
[ редактировать ]Exuberant Ctags , написанный и поддерживаемый Дарреном Хибертом до 2009 года. [5] изначально распространялся вместе с Vim , но после выпуска Vim 6 стал отдельным проектом. Он включает поддержку Emacs и etags
совместимость. [6] [7]
Exuberant Ctags включает поддержку более 40 языков программирования с возможностью добавления поддержки еще большего количества с помощью регулярных выражений .
Универсальные теги
[ редактировать ]Universal Ctags — это форк Exuberant Ctags, целью которого является продолжение его развития. Некоторые парсеры переписаны для лучшей поддержки языков. [8]
Языковой
[ редактировать ]Hasktags создает файлы тегов, совместимые с ctags, для исходных файлов Haskell . [9] Он включает поддержку создания файлов etags Emacs. [10]
jsctags — это совместимое с ctags решение для индексации кода для JavaScript . [11] Он специализируется на JavaScript и использует систему упаковки CommonJS . Он превосходит Exuberant Ctags для кода JavaScript, обнаруживая больше тегов, чем последний. [12]
Теги форматов файлов
[ редактировать ]Существует несколько форматов файлов тегов. Некоторые из них описаны ниже. В дальнейшем \ x## представляет байт в шестнадцатеричном представлении. ## . Каждая строка заканчивается переводом строки (LF, \ п = \ х0А ).
Ctags и потомки
[ редактировать ]Исходные ctags и потомки Exuberant/Universal имеют схожие форматы файлов: [13]
Cтеги
[ редактировать ]Этот формат используется vi и различными его клонами. Файл тегов обычно называется «tags».
Файл тегов представляет собой список строк, каждая строка в формате:
{tagname}\t{tagfile}\t{tagaddress}
Поля указываются следующим образом:
- {tagname } – Любой идентификатор, не содержащий пробелов.
- \ t – Ровно одна вкладка ( \ x0b ) символ, хотя многие версии vi могут обрабатывать любое количество пробелов.
- {tagfile } – имя файла, в котором {имя тега } определяется относительно текущего каталога
- {tagaddress } — команда режима ex , которая перенаправит редактора к местоположению тега. POSIX Для реализаций vi это может быть только поиск или номер строки, что обеспечивает дополнительную защиту от произвольного выполнения команд.
Файл тегов сортируется по Поле {tagname }, позволяющее быстро искать файл тегов.
Расширенные Cтеги
[ редактировать ]Этот формат используется Exuberant Ctags и Universal Ctags Vim . Эти программы могут генерировать исходный формат файла ctags или расширенный формат, который пытается сохранить обратную совместимость.
Файл расширенных тегов представляет собой список строк, каждая строка в формате:
{tagname}\t{tagfile}\t{tagaddress}[;"\t{tagfield...}]
Поля до и включительно {tagaddress } такие же, как и для ctags выше.
Необязательные дополнительные поля обозначаются квадратными скобками («[...]») и включают в себя:
- ;" – точка с запятой + двойная кавычка: завершает {tagaddress } выглядит как начало комментария к vi или ex .
- {tagfield } – поля расширения: пары «ключ: значение» разделены табуляцией для получения дополнительной информации.
Этот формат совместим с vi, отличным от POSIX , поскольку дополнительные данные интерпретируются как комментарий. Однако реализации POSIX vi должны быть изменены для его поддержки. [13]
Этаги
[ редактировать ]Это формат, используемый etags Emacs . Файл тегов обычно называется «TAGS».
Файлы etags состоят из нескольких разделов — по одному разделу на каждый входной исходный файл. Разделы представляют собой обычный текст с несколькими непечатаемыми символами ASCII, используемыми для специальных целей. Эти символы представлены ниже в виде подчеркнутых шестнадцатеричных кодов.
Раздел начинается с двухстрочного заголовка (первые два байта составляют магическое число ):
\x0c {src_file},{size_of_tag_definition_data_in_bytes}
За заголовком следуют определения тегов, по одному определению в строке, в формате:
{tag_definition_text}\x7f{tagname}\x01{line_number},{byte_offset}
{tagname} \x01 можно опустить, если имя тега можно вывести из текста определения тега.
Пример
[ редактировать ]Учитывая одну строку исходного кода test.c:
#define CCC(x)
Файл TAGS (etags) будет выглядеть так:
\x0c test.c,21 #define CCC(\x7fCCC\x011,0
Файл тегов (ctags) может выглядеть так:
CCC( test.c 1
или более гибко используя поиск:
CCC( test.c /^#define CCC(/
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Протокол языкового сервера» . Документация CodeLite . Проверено 12 июня 2022 г.
- ^ «Aminet — dev/C/Ctags.lha» .
- ^ Символы рабочей области , Документация по коду Python для Visual Studio
- ^ Linux по основным командам Руководство –
- ^ «Буйные Ctags» . ctags.sourceforge.net .
- ^ «Документация Vim: версия 6: ctags-gone» . Проверено 28 апреля 2007 г.
- ^ Linux по основным командам Руководство –
- ^ «Документация по универсальным Ctags» . Проверено 2 августа 2018 г.
- ^ «Документация GHC: Другие служебные программы Haskell» . Проверено 5 марта 2010 г.
- ^ «hasktags: создает файлы ctags «tags» и etags «TAGS» для программ Haskell» . Проверено 5 марта 2010 г.
- ^ «Репозиторий pcwalton github для jsctags» . Гитхаб . Архивировано из оригинала 22 августа 2010 г. Проверено 10 сентября 2016 г.
- ^ Патрик Уолтон (25 мая 2010 г.). «Знакомство с jsctags» . Проверено 25 мая 2010 г.
- ^ Jump up to: а б «Предложение по расширенному формату файлов тегов Vi» . Проверено 30 июня 2007 г.
Внешние ссылки
[ редактировать ]
- Единая спецификация UNIX , Версия 4 от The Open Group : создать файл тегов – Справочник по оболочке и утилитам,
- Домашняя страница универсальных Ctags
- Домашняя страница Exuberant Ctags
- Ctags на VMS
- исходный код модуля Emacs vtags.el