如何让 ctags 为 bash 中带有破折号的函数生成标签?
How can I get ctags to generate tags for functions with dashes in bash?
bash 中的一些函数有连字符或破折号,例如:
function detect-project {
...
}
但是 Exuberant Ctags 5.8 只为标签 detect
创建一个引用。来自生成的 tags
文件:
detect util.sh /^function detect-project () {$/;" f
如何让它为 detect-project
生成标签?
不建议在 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;
}
我还没有测试过,但它应该可以解决问题。
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
bash 中的一些函数有连字符或破折号,例如:
function detect-project {
...
}
但是 Exuberant Ctags 5.8 只为标签 detect
创建一个引用。来自生成的 tags
文件:
detect util.sh /^function detect-project () {$/;" f
如何让它为 detect-project
生成标签?
不建议在 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;
}
我还没有测试过,但它应该可以解决问题。
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