在Vim中是否有用于浏览/导航XSLT代码的Ctags工具?

Gur*_*ruM 5 xslt vim plugins ctags

需要一种使用Vim轻松导航/浏览XSLT文件的方法.类似于ctags可以与C/C++源代码一起使用的方式.一个好的解决方案是允许只为自己安装脚本等或直接从Vim内部运行它们.仇恨不得不走出vim只是为了搜索功能定义或"文本"搜索.

搜索了几个小时,想出了一些像'ack'这样的优秀线索.显然,这可以使用ack.vim与vim集成.然而要正确地测试它.

基本上我应该能够浏览包含其他.xsl文件的.xsl文件的迷宫,并使用函数,模板.有什么建议?

dar*_*ker 3

我发现 kipelovets 和 GuruM 的答案很有用,并结合了他们的建议制定了这个解决方案:

.ctags 文件:

--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
Run Code Online (Sandbox Code Playgroud)

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'
      \ ]
      \ }
Run Code Online (Sandbox Code Playgroud)

好多了,但我仍然遇到一些问题,包括:

  • 按模式对模板进行分组
  • 空白,例如模板/变量的属性之间的新行等...
  • 确定变量和参数的范围并应用模板和调用模板
    • 因此,如果您有多个同名但位于不同模板中的变量,则不会捕获它们所在模板的范围。
  • 带注释的模板、函数、变量和参数

未来可以尝试的更好方法:

  • 用于解析 xslt 信息的正则表达式要正确执行此操作会变得很复杂
  • 最好的解决方案可能是使用 xslt 本身编写自定义 xslt 标记生成器。
    • 这就是jsctags对 javascript 所做的事情
    • 标签文件的格式看起来很简单......所以我接下来会尝试这个。