Добавление нового языка в 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 ответа
Причины неожиданного поведения наиболее вероятны:
- Вы не используете последнюю версию 5.8 Exuberant Ctags, но версию до 5.6.
- Ваш
.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 в конце строки, в которой перечислены известные расширения.