在VIM中使用cscope浏览Python代码?
有没有人成功地在 Python 代码中使用过 cscope
呢?我现在用的是 VIM 7.2 和最新版本的 cscope
,但是它总是不能正确识别我代码中的标签(总是偏差几行)。我试过 pycscope
这个脚本,但它的输出不被现代版本的 cscope
支持。
有没有什么建议?或者有没有其他方法可以在 VIM 中浏览 Python 代码?(我特别想要 cscope
提供的那些比 ctags
更高级的功能)
6 个回答
这对我来说似乎有效:
首先,进入你Python代码的顶层目录。然后,创建一个叫做 cscope.files
的文件:
find . -name '*.py' > cscope.files
cscope -R
如果交叉引用没有正确生成,你可能需要先执行 cscope -b
命令。
编辑:我将一步一步地讲解这个过程:
准备源文件:
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。
参考链接(不是完整列表):
- gtags vimscript,使用 Gnu global,更新于 2008 年
- greputils vimscript,支持 *id idutils,2005 年
- lid vimscript,虽然很古老,但这个人做得不错,他的标签和缓冲区教程非常棒,2002 年
- pyscope 的更新版本,2010 年
希望这些能帮助你解决问题,这确实对我有帮助。要是今晚没有 pycscope,我会很沮丧的。
- 根据与
cscope
的维护者的交流,这个工具并不是为了与Python一起使用而设计的,也没有计划去实现这种兼容性。现在能用的功能,显然是偶然能用的,并不能保证以后还会继续有效。 - 看起来我一直在使用一个过时的
pycscope
版本。最新的版本0.3是支持cscope
数据库的。pycscope
的作者告诉我,他是通过阅读cscope
的源代码来弄清楚cscope
数据库的输出格式的。这个格式是故意没有文档说明的,但目前它确实可以与pycscope
0.3一起使用,这也是我将要用的解决方案。
我决定接受这个答案,因为不幸的是,其他答案即使在悬赏之后也没有提供帮助。没有答案被点赞,所以我真的不知道悬赏会给谁。