PHP/Python等内置函数的ctags信息

5 投票
2 回答
880 浏览
提问于 2025-04-16 18:06

有没有办法让ctags支持PHP/Python等语言的内置函数,这样我就可以在vim等工具的源代码浏览器中使用这些函数了?

更新:

好吧,对于Python,我可以直接在源代码文件夹上运行ctags,这样就能生成一个包含内置函数的标签文件。不过对于PHP来说,这似乎不太奏效,但PHP的源文件里有类似下面的行:

/* {{{ proto resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])

所以如果我能用ctags解析这些内容,就能在我的标签文件中得到相应的函数。我尝试使用--regex-C来让它识别,但似乎没有效果。

--regex-C='/\/\* \{\{\{ proto ([^ ]+) ([^ (]*)/\2/f/'

有没有办法让这个工作起来?

另外,在Python中,我能看到类似"class ClassName:"的行,这样可以看到类的定义,有没有办法让它也包含init函数呢?

更新:我会为PHP单独提问,谢谢大家的回答。

2 个回答

1

ctags在处理Python语法时遇到了很多麻烦,因为它会去寻找大括号,而Python是没有大括号的。

我建议你看看这个链接

2

ctags 这个工具可以让你逐步建立标签数据库,只需要加上 --append 这个选项。如果你想要查看 Python 函数的 C 语言定义(有很多?有一些?还是只有一点点?其实是直接用 C 实现的,有些是用 Python 自己实现的),你可以运行:

ctags -R
ctags --append -R /path/to/python-source

如果你只想包含 Python 源代码的一部分,可以只提供那部分;就像你在评论里说的,Lib/ 是个不错的起点 :)

ctags -R
ctags --append -R /path/to/python-source/Lib

考虑到大多数解释型语言(甚至一些字节码编译的语言)在后台会用 C 语言实现很多接口,所以在你的源代码和你依赖的 API 源代码之间无缝切换可能会有点困难。

我发现为源代码准备多个数据库是很有帮助的;有时候用 cscope 来回答问题效果最好,有时候用 gid 更方便,有时候用 ctags 更合适。ctagsvim 中的集成非常棒,但 gid 通常更容易进行脚本编写。

撰写回答