Я нашел ответы кипеловетов и GuruM полезными и разработал это решение, сочетающее их советы .:
.ctags file:
--langdef=xslt
--langmap=xslt:.xsl
--regex-xslt=/<xsl:template[^>]+name=\"([-a-zA-Z0-9_:]+)\"( +mode="([^"]+)")?/\1 \2/n,namedtemplate/i
--regex-xslt=/<xsl:template[^>]+match=\"([^"]+)\"( +mode="([^"]+)")?/\1 \2/m,matchedtemplate/i
--regex-xslt=/<xsl:apply-templates +select="([^"]{2,})"( +mode="([^"]+)")?/\1 \2/a,applytemplate/i
--regex-xslt=/<xsl:call-template +select="([^"]+)"( +mode="([^"]+)")?/\1 \2/c,calltemplate/i
--regex-xslt=/<xsl:variable[^>]+name=\"([-a-zA-Z0-9_]+)\"/\1/v,variable/i
--regex-xslt=/<xsl:function[^>]+name=\"([-a-zA-Z0-9_:]+)\"/\1/f,function/i
--regex-xslt=/<xsl:param[^>]+name=\"([-a-zA-Z0-9_:]+)\"/\1/p,parameter/i
настройки тега vim (которые некоторыелюди могут найти полезными):
let g:tagbar_type_xslt = {
\ 'ctagstype' : 'xslt',
\ 'kinds' : [
\ 'n:templates (named)',
\ 'm:templates (matched)',
\ 'a:applied templates',
\ 'c:called templates',
\ 'f:functions',
\ 'p:parameters',
\ 'v:variables'
\ ]
\ }
Это лучше, но некоторые проблемы, которые у меня все еще есть, включают:
- группирование шаблонов по их режимам
- пробел, такойкак новые строки между атрибутами для шаблона / переменной и т. д. ...
- определение переменных и параметров и применение шаблонов и шаблонов вызовов
- Так что, если у вас есть несколько переменных с одним и тем же именем, но с разнымишаблоны, область действия шаблона которых они не содержат.
- прокомментированные шаблоны, функции, переменные и параметры
Лучший способ попробоватьбудущее:
- Регулярное выражение для анализа информации из xslt get complex для правильной работы
- Лучшим решением может быть написание собственного генератора тегов xslt.спой сам xslt.
- Это то, что jsctags делает для javascript
- Формат файла тегов выглядит просто ... поэтому я попробую это дальше.