代码之家  ›  专栏  ›  技术社区  ›  maayank

VIM中的XSD遍历

  •  6
  • maayank  · 技术社区  · 14 年前

    我使用VIM作为文本编辑器,编辑了许多XML和WSDL文件。

    WSDL文件有一个XSD部分。 是否有一些VIM插件可以用来遍历XSD类型?也就是说,如果我有以下行,并且插入符号是“”符号的位置:

    <xsd:element minOccurs="0" name="FooName" type="Magic|FooType"/>
    

    我按ctrl+alt+foo(或其他一些魔术组合),它将使我了解magicfootype的定义,即:

    <xsd:complexType name="MagicFooType">
    

    我找不到如何使用CTAGS,并且我能找到的所有其他插件都是用于命令语言(即Java)。是否有一些插件/脚本来完成此项工作?

    3 回复  |  直到 9 年前
        1
  •  2
  •   Tim C    14 年前

    我观察这个线程已经有一段时间了,我自己也在想这个问题,因为我是一个VIM用户,处理许多非常大的XML文件和相关的XSD、XSLT和XQuery文件,所有这些都可以从这类事情中获益,正如我确信您可以想象的那样。

    经过一些研究,这可以用ctags来完成,但是目前没有任何东西可以为它创建ctags文件。基本上,CTAG看起来是这样的:

    {tagname}<tab>{tagfile}<tab>{tagaddress}
    

    因为tagaddress是一个ex模式的命令,所以它可以把您带到一个特定文件的任何地方,从而直接到达定义上。

    基本上,我们需要做的就是创建一个脚本,该脚本将运行在WSDL(或XSD,或其他什么)中,并且知道标记和文件的位置,在ctags文件中创建适当的行来映射所有定义。听起来是个有趣又有用的小项目。

    很抱歉,这不是一个完整的答案,但它可以与CTags有关,并将为您提供所需的健壮性。

        2
  •  3
  •   mjanssen    9 年前

    这是相对容易实现使用ctags。我专门使用VIM进行XSD编辑,并与丰富的CTAG结合使用。( http://ctags.sourceforge.net/ )这对我很管用。

    因为丰富的ctags不支持开箱即用的xsd,所以需要生成自定义语言定义。

    我将下面的文件用作 .ctags 在我的XSD项目中。在项目根目录中运行ctags命令之后,我可以使用标准的vim标记导航( Ctrl-[ 追随和 Ctrl-O 用于返回)用于跳转到定义。

    为了让vim获取父目录中的标记文件,我在 .vimrc

    set tags=./tags;
    

    把这个放进去 CTAGS 在您的项目根目录中。

    --langdef=XSD
    --langmap=XSD:+.xsd
    --langmap=XSD:+.wsdl
    --regex-XSD=/element name="([a-zA-Z0-9_]+:){0,1}([a-zA-Z0 -9_]+)"/\2/d,definition/
    --regex-XSD=/Type [a-zA-Z0-9="]*[ ]{0,1}name="([a-z_]+:){0,1}([a-zA-Z0-9_]+)"/\2/d,definition/
    --exclude=.git
    --recurse=yes
    
        3
  •  2
  •   ngn    14 年前

    gd(“go-to-declaration”)不知道XML格式,但在这种情况下可能会完成这项工作,前提是xsd部分位于WSDL的顶部。