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

时间:2011-06-24 11:12:24

标签: xslt vim plugins ctags

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

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

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

3 个答案:

答案 0 :(得分: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

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的信息的正则表达式可以正确地执行此操作
  • 最好的解决方案可能是使用xslt本身编写自定义xslt标记生成器
    • 这是jsctags为javascript所做的事情
    • 标签文件的格式看起来很简单......所以我接下来会尝试这个。

答案 1 :(得分:1)

感谢您的提问和回答@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'    

答案 2 :(得分:0)

谢谢@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-]测试标签文件,从功能使用跳转到定义等。
注意:"Extending" ctags需要C编码,此处不再讨论。