为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2022-04-23 21:29:49
当 python 类定义跨越多行时 Exuberant-ctags 生成错误的标签,只有最后一行进入搜索模式:考虑文件test.py:class FirstSubclass(    LongLineBaseClass, AnotherLongClassName,    MoreBaseClassWithVeryLongName):    passclass SecondSubclass(    LongLineBaseClass, AnotherLongClassName,    MoreBaseClassWithVeryLongName):    passclass OneLineClass(LongLineBaseClass):    pass和生成的tags文件ctags test.py(添加评论):FirstSubclass   test.py /^):$/;"    c !PROBLEMOneLineClass    test.py /^class OneLineClass(LongLineBaseClass):$/;"    c !OKSecondSubclass  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,什么都没有。有任何想法吗 ?提前致谢。
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

Universal-ctags ( https://ctags.io ) 是 Exuebrante-ctags 的非官方分支,可以提取预期的模式:


[yamato@slave]~% cat /tmp/foo.py 

cat /tmp/foo.py 

class FirstSubclass(

    LongLineBaseClass, AnotherLongClassName,

    MoreBaseClassWithVeryLongName

):

    pass



class SecondSubclass(

    LongLineBaseClass, AnotherLongClassName,

    MoreBaseClassWithVeryLongName

):

    pass



class OneLineClass(LongLineBaseClass):

    pass


[yamato@slave]~% u-ctags -o - /tmp/foo.py

u-ctags -o - /tmp/foo.py

FirstSubclass   /tmp/foo.py /^class FirstSubclass($/;"  c

OneLineClass    /tmp/foo.py /^class OneLineClass(LongLineBaseClass):$/;"    c

SecondSubclass  /tmp/foo.py /^class SecondSubclass($/;" c

此外,它可以填充继承字段:


[yamato@slave]~% u-ctags --fields=+i -o - /tmp/foo.py

u-ctags --fields=+i -o - /tmp/foo.py

FirstSubclass   /tmp/foo.py /^class FirstSubclass($/;"  c   inherits:LongLineBaseClass, AnotherLongClassName, MoreBaseClassWithVeryLongName 

OneLineClass    /tmp/foo.py /^class OneLineClass(LongLineBaseClass):$/;"    c   inherits:LongLineBaseClass

SecondSubclass  /tmp/foo.py /^class SecondSubclass($/;" c   inherits:LongLineBaseClass, AnotherLongClassName, MoreBaseClassWithVeryLongName 



查看完整回答
反对 回复 2022-04-23
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号