Существует ли инструмент Ctags для просмотра / навигации по коду XSLT в Vim? - PullRequest
5 голосов
/ 24 июня 2011

Нужен способ навигации / просмотра файлов XSLT с помощью Vim.Подобно тому, как ctags можно использовать с исходным кодом C / C ++.Хорошее решение позволит устанавливать скрипты и т. Д. Только для себя или запускать их прямо из Vim.Ненавижу выходить из vim только для поиска определения функции или «текстового» поиска.

Поиск в течение нескольких часов и поиск хороших ссылок, таких как «ack».Очевидно, это можно интегрировать с vim с помощью ack.vim.Тем не менее, чтобы проверить это правильно.

По сути, я должен быть в состоянии пройти через лабиринт файлов .xsl, которые включают в себя другие файлы .xsl и использовать функции, шаблоны.Есть предложения?

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

Я нашел ответы кипеловетов и 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
    • Формат файла тегов выглядит просто ... поэтому я попробую это дальше.
1 голос
/ 17 августа 2011

спасибо за ваш вопрос и ответ @ GuruM

хотя ваша версия ~ / .ctags у меня не работала, я использовал следующее:

--langdef=xslt
--langmap=xslt:.xsl
--regex-xslt=/<xsl:template[^>]+name=\"([-a-zA-Z0-9_:]+)\"/\1/f,function/i

отлично работает с плагином AutoTag и требует только одну следующую строку для плагина TagList:

let s:tlist_def_xslt_settings = 'xslt;f:function'    
0 голосов
/ 18 июля 2011

Спасибо @Izap.Извините, по-видимому, я не могу поднять свой собственный вопрос.Не удалось выбрать ваш ответ, даже если он наиболее близок к тому, что я хотел (пример кода помог бы).
Создать файл тегов можно очень легко:
1) Протестируйте регулярные выражения для своего пользовательскогоязык: egrep 'pattern' *
2) Скопируйте и вставьте пользовательский язык с указанными выше регулярными выражениями в ~ / .ctags.

--langdef=EXSLT
--langmap=EXSLT:.xsl
--regex-EXSLT=/<xsl:variable[ \t]+name=\"([-a-zA-Z0-9_]+)\"/\1/v,variable/i
--regex-EXSLT=/<func:function[ \t]+name=\"([-a-zA-Z0-9_:]+)\"/\1/f,function/i
--regex-EXSLT=/<xsl:template[ \t]+match=\"([/-a-zA-Z0-9_:]+)\"/\1/t,template/i

Примечание. (И) используются для создания записи тега в файле тегов, где \ 1 - соответствующее ключевое слово.Здесь я добавляю xslt с поддержкой exslt выше.
Вы можете расширить отображение языков, добавив нижеприведенные шаблоны регулярных выражений.
3) Выполнить cd srcdir && ctags -R *
4) Проверить файл тегов, чтобы убедиться, что ctagsнашел шаблоны
5) Откройте vim и протестируйте файл тегов, используя Ctrl-], чтобы перейти от использования функции к определению и т. д.
Примечание: "Расширение" ctags требует кодирования C и являетсяздесь не обсуждается.

...