在VIM中使用cscope浏览Python代码?

19 投票
6 回答
28994 浏览
提问于 2025-04-16 04:11

有没有人成功地在 Python 代码中使用过 cscope 呢?我现在用的是 VIM 7.2 和最新版本的 cscope,但是它总是不能正确识别我代码中的标签(总是偏差几行)。我试过 pycscope 这个脚本,但它的输出不被现代版本的 cscope 支持。

有没有什么建议?或者有没有其他方法可以在 VIM 中浏览 Python 代码?(我特别想要 cscope 提供的那些比 ctags 更高级的功能)

6 个回答

18

这对我来说似乎有效:

首先,进入你Python代码的顶层目录。然后,创建一个叫做 cscope.files 的文件:

find . -name '*.py' > cscope.files

cscope -R

如果交叉引用没有正确生成,你可能需要先执行 cscope -b 命令。

18

编辑:我将一步一步地讲解这个过程:

准备源文件:

exhuberant ctags 有一个选项: -x

   Alternatively,  ctags  can generate a cross reference file which lists,
   in human readable form, information about the  various  source  objects
   found in a set of language files.

这就是问题的关键:

 ctags -x $(ls **/*.py);                  # replace with find if no zsh

这个选项会给你一个已知格式的源对象数据库,具体描述在

 man ctags;                               # make sure you use exuberant ctags!

Gnu Global 不仅限于“开箱即用”的文件类型。任何常规文件格式都可以使用。

另外,你还可以使用 gtags-cscope,这个工具和 global 一起提供,正如手册第 3.7 节提到的那样,可以作为使用 gtags 的一个快捷方式。最终,你会得到一个 ctags 表格文件,Global/gtags 可以解析这个文件来获取你的对象,或者你也可以使用 pycscope 的源代码,结合你已知格式的 ctags 文件,来为 vim 的 cscope 命令提供输入,具体在

if_cscope.txt 中。

无论哪种方式,都是可以做到的。

你可能更喜欢 idutils 吗?

当然可以,因为

z3c.recipe.tags

在 pypi 上利用了 ctags 和 idutils 来为构建生成标签文件,这也是我接下来要研究的方法。

当然,你也可以使用下面的 greputils 脚本,它支持 idutils,我们知道 idutils 可以和 Python 一起工作,如果这不行,还有一个叫做 vimentry 的工具,它也是今年推出的,使用了 Python、idutils 和 vim。

参考链接(不是完整列表):

希望这些能帮助你解决问题,这确实对我有帮助。要是今晚没有 pycscope,我会很沮丧的。

12
  1. 根据与cscope的维护者的交流,这个工具并不是为了与Python一起使用而设计的,也没有计划去实现这种兼容性。现在能用的功能,显然是偶然能用的,并不能保证以后还会继续有效。
  2. 看起来我一直在使用一个过时的pycscope版本。最新的版本0.3是支持cscope数据库的。pycscope的作者告诉我,他是通过阅读cscope的源代码来弄清楚cscope数据库的输出格式的。这个格式是故意没有文档说明的,但目前它确实可以与pycscope 0.3一起使用,这也是我将要用的解决方案。

我决定接受这个答案,因为不幸的是,其他答案即使在悬赏之后也没有提供帮助。没有答案被点赞,所以我真的不知道悬赏会给谁。

撰写回答