Exuberant-ctags 错误地标记了 python 多行类定义

当 python 类定义跨越多行时 Exuberant-ctags 生成错误的标签,只有最后一行进入搜索模式:


考虑文件test.py:


class FirstSubclass(

    LongLineBaseClass, AnotherLongClassName,

    MoreBaseClassWithVeryLongName

):

    pass



class SecondSubclass(

    LongLineBaseClass, AnotherLongClassName,

    MoreBaseClassWithVeryLongName

):

    pass



class OneLineClass(LongLineBaseClass):

    pass

和生成的tags文件ctags test.py(添加评论):


FirstSubclass   test.py /^):$/;"    c !PROBLEM

OneLineClass    test.py /^class OneLineClass(LongLineBaseClass):$/;"    c !OK

SecondSubclass  test.py /^):$/;"    c !PROBLEM

两者都FirstSubclass接收SecondSubclass到相同的搜索模式(ex command):/^):$即每个类定义的最后一行只有两个字符。这使得在 vim 中导航的标签无法使用。


旺盛的 ctags 版本和信息:


Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert

  Compiled: Oct  7 2014, 13:52:37

  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net

  Optional compiled features: +wildcards, +regex


我尝试过的:language-python kinds我使用了带和不带, 参数的 ctags,什么都没有。


有任何想法吗 ?提前致谢。


狐的传说
浏览 123回答 1
1回答

皈依舞

Universal-ctags ( https://ctags.io ) 是 Exuebrante-ctags 的非官方分支,可以提取预期的模式:[yamato@slave]~% cat /tmp/foo.py&nbsp;cat /tmp/foo.py&nbsp;class FirstSubclass(&nbsp; &nbsp; LongLineBaseClass, AnotherLongClassName,&nbsp; &nbsp; MoreBaseClassWithVeryLongName):&nbsp; &nbsp; passclass SecondSubclass(&nbsp; &nbsp; LongLineBaseClass, AnotherLongClassName,&nbsp; &nbsp; MoreBaseClassWithVeryLongName):&nbsp; &nbsp; passclass OneLineClass(LongLineBaseClass):&nbsp; &nbsp; pass[yamato@slave]~% u-ctags -o - /tmp/foo.pyu-ctags -o - /tmp/foo.pyFirstSubclass&nbsp; &nbsp;/tmp/foo.py /^class FirstSubclass($/;"&nbsp; cOneLineClass&nbsp; &nbsp; /tmp/foo.py /^class OneLineClass(LongLineBaseClass):$/;"&nbsp; &nbsp; cSecondSubclass&nbsp; /tmp/foo.py /^class SecondSubclass($/;" c此外,它可以填充继承字段:[yamato@slave]~% u-ctags --fields=+i -o - /tmp/foo.pyu-ctags --fields=+i -o - /tmp/foo.pyFirstSubclass&nbsp; &nbsp;/tmp/foo.py /^class FirstSubclass($/;"&nbsp; c&nbsp; &nbsp;inherits:LongLineBaseClass, AnotherLongClassName, MoreBaseClassWithVeryLongName&nbsp;OneLineClass&nbsp; &nbsp; /tmp/foo.py /^class OneLineClass(LongLineBaseClass):$/;"&nbsp; &nbsp; c&nbsp; &nbsp;inherits:LongLineBaseClassSecondSubclass&nbsp; /tmp/foo.py /^class SecondSubclass($/;" c&nbsp; &nbsp;inherits:LongLineBaseClass, AnotherLongClassName, MoreBaseClassWithVeryLongName&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python