我如何获得ctags为bash中的破折号函数生成标签?

时间:2015-04-01 20:44:39

标签: bash ctags exuberant-ctags

bash中的某些函数有连字符或短划线,如:

function detect-project {
    ...
}

但Exuberant Ctags 5.8仅为标记detect创建引用。从生成的tags文件:

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

如何让它为detect-project生成标记?

2 个答案:

答案 0 :(得分:1)

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

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

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

变为

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

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

答案 1 :(得分: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