【问题标题】:How to add comments to an Exuberant Ctags config file?如何向 Exuberant Ctags 配置文件添加注释?
【发布时间】:2012-06-13 22:50:50
【问题描述】:

我可以使用什么字符将 cmets 放入 Exuberant Ctags .ctags 文件中?

我想添加带有解释的 cmets,并且可能禁用一些正则表达式。

但我找不到任何 ctags-exuberant 接受的评论字符!
我不断收到警告:

ctags: Warning: Ignoring non-option in /home/joey/.ctags

这比错误要好,但还是有点烦人。

我已经尝试将 # // /* ... */; 作为 cmets,但 ctags 尝试将它们全部解析!

这是一个示例文件,其中包含一些 ctags 会抱怨的 cmets:

# Add some more rules for Javascript
--langmap=javascript:+.jpp
--regex-javascript=/^[ \t]*var ([a-zA-Z_$][0-9a-zA-Z_$]*).*$/\1/v,variable/
--regex-javascript=/^[ \t]*this\.([a-zA-Z_$][0-9a-zA-Z_$]*)[ \t]*=.*$/\1/e,export/
--regex-javascript=/^[ \t]*([a-zA-Z_$][0-9a-zA-Z_$]*):.*$/\1/p,property/
--regex-javascript=/^\<function\>[ \t]*([a-zA-Z_$][0-9a-zA-Z_$]*)/\1/f,function/

# Define tags for the Coffeescript language
--langdef=coffee
--langmap=coffee:.coffee
--regex-coffee=/^class @?([a-zA-Z_$][0-9a-zA-Z_$]*)( extends [a-zA-Z_$][0-9a-zA-Z_$]*)?$/\1/c,class/
--regex-coffee=/^[ \t]*(@|this\.)([a-zA-Z_$][0-9a-zA-Z_$]*).*$/\2/e,export/
--regex-coffee=/^[ \t]*@?([a-zA-Z_$][0-9a-zA-Z_$]*):.*[-=]>.*$/\1/f,function/
--regex-coffee=/^[ \t]*([a-zA-Z_$][0-9a-zA-Z_$]*)[ \t]+=.*[-=]>.*$/\1/f,function/
--regex-coffee=/^[ \t]*([a-zA-Z_$][0-9a-zA-Z_$]*)[ \t]+=[^->\n]*$/\1/v,variable/
--regex-coffee=/^[ \t]*@?([a-zA-Z_$][0-9a-zA-Z_$]*):.*$/\1/p,property/

【问题讨论】:

    标签: comments warnings ctags exuberant-ctags


    【解决方案1】:

    你不能!我查看了源代码(感谢 apt-get source)。没有检查要忽略的行。相关代码在options.c中的parseFileOptions()中

    但有时 cmets 是必需品,因此作为一种解决方法,我将注释作为正则表达式放入其中,以使其不可能匹配任何内容。

    --regex-coffee=/^(COMMENT: Disable next line when using prop tag)/\1/X,XXX/
    

    ^ 有助于快速匹配失败,而 ( ) 包装器纯粹是为了视觉效果。

    您的评论应该是一个有效的正则表达式,以避免在 stderr 上出现警告。 (这意味着必须避免使用未转义的 /s,如果您使用任何 [ ] ()s,它们应该配对。)请参阅 Tom 的解决方案以避免这些限制。

    【讨论】:

    • +1 用于查看源代码。不过,骇人听闻的解决方案相当丑陋,我宁愿接受警告。
    • 能否建议开发团队对 cme​​ts 的支持?
    • 注意如果() 之间存在/,则此解决方案将失败。请参阅我的答案,了解适用于此且在视觉上更整洁的内容。
    【解决方案2】:

    正如@joeytwiddle 所指出的,解析器不支持 cmets,但有一种解决方法。

    示例.ctags 文件:

    --regex-C=/$x/x/x/e/ The ctags parser currently doesn't support comments
    --regex-C=/$x/x/x/e/ This is a work-around which works with '/' characters
    --regex-C=/$x/x/x/e/ http://stackoverflow.com/questions/10973224/how-to-add-comments-to-an-exuberant-ctags-config-file
    --regex-C=/$x/x/x/e/ 
    --regex-C=/$x/x/x/e/ You can add whatever comment text you want here.
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 Universal-ctag(https://ctags.io),则可以使用“#”作为评论的开头。

      【讨论】:

        【解决方案4】:

        鉴于 cmets 不起作用,那么 .ctags.readme 文件呢...

        对于大多数事情,您实际上并不需要评论,例如你真的不需要下面的评论。

        # Define tags for the Coffeescript language
        --langdef=coffee
        --langmap=coffee:.coffee
        

        但是我可以看到您可能想要添加 cmets 来解释一些令人费解的正则表达式,因此对于绝对需要它的每一行,您可以将其作为降价文件复制粘贴到 .ctags.readme 文件中:

        Forgive me father for I have regexed
        It was purely because I wanted some lovely coffee properties
        ```
        --regex-coffee=/^[ \t]*@?([a-zA-Z_$][0-9a-zA-Z_$]*):.*$/\1/p,property/
        ```
        

        保持.ctags.readme.ctags 同步

        你可以在 ctags 文件的底部有一个块,用换行符分隔,然后删除这个最后一个块。

        如果您的 .ctags 文件中只有一个换行符,则此 sed 将删除换行符后的所有行。

        然后对--regex 行进行一些查找,以将.ctags.readme 中的行附加到.ctags 中。

        sed -i '/^\s*$/,$d' .ctags
        grep "^--regex" .ctags.readme >> .ctags
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-11
          • 2022-06-23
          • 1970-01-01
          • 2015-01-13
          • 1970-01-01
          相关资源
          最近更新 更多