使用 cscope 来浏览 VIM 的 Python 代码?

问题描述 投票:17回答:6

有没有人成功地使用 cscope 用Python代码?我有 VIM 7.2 和最新版本的 cscope 安装,但是它不能正确地获取我的代码的标签(总是偏离几行)。我尝试了 pycscope 脚本,但其输出不受现代版本的 cscope.

有什么想法吗?或者用VIM浏览Python代码的替代方法?(我特别对额外的功能感兴趣。cscope 的简单标签之外,还提供 ctags)

python vim editor cscope
6个回答
18
投票

EDIT:我将一步步的进行操作。

准备源代码

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,如手册第 3.7 节中提到的 global 自带的 gtags,作为使用 gtags 的一种可能的快捷方式。 你最终会得到一个 ctags 表格文件的输入,Globalgtags 可以解析这个文件来获得你的对象,或者你可以使用 pycscope 的源文件和已知格式的 ctags 文件来获得 vim cscope 命令的输入。

if_cscope.txt。

无论哪种方式都是相当可行的。

也许你更喜欢idutils?

绝对可能,因为

z3c.recipe.tags

在pypi上使用ctags和idutils来为buildout创建标签文件,这个方法我将在短时间内进行研究。

当然,你也可以一直使用下面的greputils脚本,它对idutils有支持,我们知道idutils可以和python一起使用,如果失败了,还有今年的一个叫vimentry的东西,也是使用python、idutils和vim。

参考链接(不完全列表)。

希望能帮助你解决你的问题,我当然帮助了我。 我今晚如果有了蛆虫的显微镜,会很难过。


14
投票

这似乎对我有用。

把你的Python代码改到顶层目录下 创建一个名为 cscope.files:

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

cscope -R

你可能需要进行 cscope -b 首先,如果交叉引用不能正常建立。


11
投票
  1. 从与维护者的通信中得知 cscope这个工具并不是为了和Python一起工作而设计的,也没有计划实现这种兼容性。不管现在能用的是什么,显然都是错误的,而且也不能保证它能继续工作。
  2. 看来我一直在使用过时的 pycscope. 最新的0.3版本是由支持的 cscope DB. 的作者。pycscope 他告诉我,他已经弄清楚 "我 "的输出格式了。cscope 的源代码。cscope. 这种格式没有被记录在案,但目前它可以和 pycsope 0.3,这是我要使用的解决方案。

我将接受这个答案,因为不幸的是,即使在宣布赏金之后,也没有其他答案提供帮助。没有答案被上票,所以说实话,我不知道赏金会去哪里。


2
投票

有一个精彩的 Python-模式-klen 插件。如果你安装了它和 rope (python 重构库),那么访问某个特定术语的定义就会变得很简单,就像 <C-c>g<C-c>rag 第一个是文件类型映射,第二个是全局的)。还有更多有用的功能,有些对我来说是无用的。所有这些功能都是不能用的。问题列表中的功能在 cscope-intro:

  1. 这个符号用在哪里? <C-c>f. 但相当混乱,因为在快速修复列表中的结果确实显示出了 - 而不是实际的线条(虽然它们指向正确的位置)。也许它会被修复。
  2. 它的定义在哪里?, 这个全球符号的定义是什么?, 这个功能在源文件中的哪里? <C-c>g
  3. <...>全局符号的定义是什么? <C-c>raj

不是很懂,但我不是太有经验的ropevim用户。


0
投票

我也遇到了和你一样的问题,在网上浏览了一下,我找到了一个解决的方法。

创建一个python脚本 cscope_scan.py

import os

codeRootDir = os.getcwd()

__revision__ = '0.1'
__author__ = 'lxd'

FILE_TYPE_LIST= ['py']

if __name__ == '__main__':
    import os
    f = open('cscope.files','w')
    for root,dirs,files in os.walk(codeRootDir):
        for file in files:
            for file_type in FILE_TYPE_LIST:
                if file.split('.')[-1] == file_type:
                    f.write('%s\n' %os.path.join(root,file))
    f.close()
    cmd = 'cscope -bk'
    os.system(cmd)

在你的代码根目录下执行这个脚本,这样就会产生以下信息 cscope.files 而后发泄 cscope -b 不知道我的电脑怎么了,最后两行不好用,但我觉得手动输入一个 cscope -bk 是可以接受的:)


0
投票

这个黑客似乎也强迫cscope通过Python文件。

cscope -Rb -s *

如果你接受 cscope显然不是为Python设计的.

超集任何语言任何工具问题。如何找到Vim中变量的所有出现?

© www.soinside.com 2019 - 2024. All rights reserved.