0

bash 中的一些函数有连字符或破折号,例如:

function detect-project {
    ...
}

但是 Exuberant Ctags 5.8 只为标签创建一个引用detect。从生成的tags文件中:

detect  util.sh /^function detect-project () {$/;"  f

我怎样才能让它生成一个标签detect-project

4

2 回答 2

1

不建议在 bash 中使用连字符(或除下划线以外的其他特殊字符),这会导致很多混乱,就像在这种情况下一样。最好的办法是重命名它们!

话虽如此,您的另一个选择是bash向 ctags 添加自定义语言定义。您可以简单地复制默认使用的那个(源中的 sh.c)并修改它。要替换的相关部分:

    while (isalnum ((int) *cp)  ||  *cp == '_')
    {
        vStringPut (name, (int) *cp);
        ++cp;
    }

变成

    while (isalnum ((int) *cp)  ||  *cp == '_' || *cp == '-')
    {
        vStringPut (name, (int) *cp);
        ++cp;
    }

我还没有测试过,但它应该可以解决问题。

于 2015-04-02T12:42:09.080 回答
0

Universal-ctags( https://ctags.io ) 无需任何额外配置即可捕获整个名称。

[jet@localhost]~/var/ctags% cat foo.sh
function detect-project {
    ...
}
[jet@localhost]~/var/ctags% ./ctags -o - ./foo.sh
detect-project  ./foo.sh    /^function detect-project {$/;" f
于 2017-04-27T16:19:11.790 回答