Добавление нового языка в ctags не работает

Я пытаюсь добавить расширение .volt к языковой карте ctags, но оно продолжает игнорировать файл .volt. Это содержимое моего файла .ctags:

--recurse=yes
--tag-relative=yes
--exclude=*.git*
--exclude=.DS_Store

--langmap=html:+.volt

Когда я сделаю ctags --list-maps, я увижу файлы.volt, включенные в HTML:

HTML     *.htm *.html *.volt

Но все же, когда я запускаю ctags, он полностью игнорирует файлы .volt. Что я здесь не так делаю?

2 ответа

Решение

Причины неожиданного поведения наиболее вероятны:

  1. Вы не используете последнюю версию 5.8 Exuberant Ctags, но версию до 5.6.
  2. Ваш .ctags файл имеет --langmap=html:+.volt в конце файла без завершения строки.

Прочитайте полный рассказ ниже о том, почему я думаю, что эти две причины приводят к неожиданному поведению Ctags на вашем компьютере.


Я посмотрел на вашу проблему в Windows, сначала используя более старую версию 5.5.4 Exuberant Ctags, установленную с текстовым редактором UltraEdit, а затем и версию 5.8, загруженную непосредственно со страницы проекта Exuberant Ctags.

Я создал копию одного из моих HTML-проектов с 1 *.html-файлом в родительском каталоге тестового проекта, 3 *.html-файлами в подкаталоге и еще двумя *.html-файлами также в подкаталоге с расширением файла, измененным с html в volt на обоих файлах, которые были просто копиями 2 из 3 *.html файлов в этом подкаталоге.

Далее я создал в родительском каталоге проекта ctags.conf файл и скопировал несколько строк, которые вы разместили в этом файле. Дополнительно я вставил сверху строку с --verbose поскольку это полезно при поиске подобных проблем.

И последнее, что я скопировал ctags.exe (сначала v5.5.4, позже v5.8) также в каталог тестового проекта только для упрощения его запуска из командной строки.

Я открыл окно командной строки в каталоге тестового проекта и выполнил

ctags.exe -f test.tag --options=ctags.conf

На подробном выводе я мог видеть, что оба файла *.volt были открыты для обработки и созданы test.tag содержит также все теги из файлов 2 *.volt, такие же теги, как и у файлов 2 *.html, из которых ранее были скопированы файлы *.volt.

Так в чем может быть проблема?

Я не только знаком с HTML. Моя основная работа - программирование на C/C++. Поэтому я знаю о часто допускаемой ошибке в файлах исходного кода на С при чтении в текстовых файлах: неправильная обработка текстовых файлов без завершения строки в последней строке файла.

И я знаю, что некоторые текстовые редакторы, такие как gedit в Linux поместите курсор в Ctrl+End в начале строки ниже последней строки в файле, даже если в последней строке файла нет конца строки. В этом случае каретка должна располагаться текстовым редактором в конце строки в последней строке, а не в начале следующей строки за реальным концом файла. Это, на мой взгляд, неправильное поведение позволяет пользователю текстового редактора думать, что у текстового файла есть конец строки также в последней строке файла, даже если это не так.

Так я думал, что вы добавили --langmap=html:+.volt возможно, в конце файла без окончания строки и ctags.exe не оценивает строку в этом случае из-за плохо выполненного разбора текстового файла в исходном коде. Поэтому я убрал окончание строки в ctags.conf из последней строки, содержащей только сейчас --langmap=html:+.volt

Я выполнил ту же командную строку, что и раньше, и AHA, оба файла *.volt игнорируются из-за unknown language,

Это было время, когда я скачал версию 5.8 Ctags для Windows и скопировал ее в каталог тестового проекта, заменив исполняемый файл версии 5.5.4.

Я выполнил командную строку снова с неизмененным ctags.conf, Оба файла *.volt были обработаны Ctags и test.tag снова содержит теги из обоих файлов *.volt.

Добавление в последнюю строку файла ctags.conf снова завершение строки и повторное выполнение командной строки не привели к другому выводу. Так что эта ошибка с игнорированием последней строки файла опций, если в конце файла нет конца строки в версии 5.8 Ctags.

Я искал в Заметках об изменениях Exuberant Ctags для last и обнаружен в блоке заметок об изменениях для ctags-5.6 (понедельник, 29 мая 2006 г.)

  • Исправлена ​​проблема с чтением последней строки файла списка (-L) без финального перевода строки.

Это подтверждение того, что я думал и мог видеть. И, конечно, проблема существовала не только при чтении файла списка, но и при чтении других текстовых файлов, таких как файл опций, или файлов C и Java, о чем сообщает следующая строка в заметках об изменениях.

  • Исправлен бесконечный цикл, который мог возникать в файлах без заключительного перевода строки [C, Java].

Если двоичный файл ctags действительно universal ctags вам нужно поместить / связать свой файл конфигурации здесь ( man ctags-universal -> FILES):

      ~/.ctags.d/my-config.ctags

Расширение файла .ctags актуально.

В моем случае мне понадобились ctags для поддержки arduino (.ino)тип файла. Добавлять --langmap=c++:+.ino к ~/.ctags.d/local.ctags (это только символические ссылки на ~/.ctags В самом деле).

Проверять:

      ctags --list-maps | grep C++
C++      *.c++ *.cc *.cp *.cpp *.cxx *.h *.h++ *.hh *.hp *.hpp *.hxx *.inl *.C *.H *.CPP *.CXX *.ino
[...]

Обратите внимание на * .ino в конце строки, в которой перечислены известные расширения.

Другие вопросы по тегам