需要一种方法来使用Vim轻松导航/浏览XSLT文件。 类似于ctags可以与C / C ++源代码一起使用的方式。 一个好的解决方案是允许只为自己安装脚本等或直接从Vim内部运行它们。恨不得不走出vim只是为了搜索功能定义或“文本”搜索。
搜索了几个小时,想出了一些好的线索,比如'ack'。 显然,这可以使用ack.vim与vim集成。然而要正确地测试它。
基本上我应该能够浏览包含其他.xsl文件并使用函数,模板的.xsl文件的迷宫。有什么建议吗?
答案 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'
\ ]
\ }
它更好,但我仍然遇到的一些问题包括:
未来尝试的更好方法:
答案 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编码,此处不再讨论。