【问题标题】:Using cscope to browse Python code with VIM?使用 cscope 用 VIM 浏览 Python 代码?
【发布时间】:2010-09-15 14:55:04
【问题描述】:

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

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

【问题讨论】:

  • 您是否考虑过简单地修复 pycscope?我还没有研究需要做什么,但我无法想象这太难了。此外,您可能需要更新您的问题,以提及,正如您的博客文章所说,cscope 被 Python cmets 抛弃了。
  • @ssokolow:修复pycscope 的问题是cscope 使用的“DB”格式没有记录,根据cscope 的维护者的说法,这是设计使然
  • 啊。那会很不愉快。我必须考虑在这种情况下我会尝试什么解决方案。
  • 即使尝试修改 cscope 也是一场灾难。我可以找到用于识别 cmets 的代码,但我认为尝试在注释代码中包含 # 和 """ 会很麻烦。也许最简单的方法是预处理源文件并剥离 cmets(替换它们有空行)。但同样,这不是很有趣,因为 cscope 不能使用标准输入。
  • Doxygen 原生只支持 C 和 Java,但通过 PREFILTER 选项它能够处理任何编程语言文件。需要为该语言编写过滤应用程序。我还向 ctags 提交了(作为patch #3413344)预过滤选项。也许在 cscope 中也有它会很好。

标签: python vim editor cscope


【解决方案1】:

编辑:我将逐步完成该过程:

准备来源:

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 的可能快捷方式。您最终会得到一个 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 .

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

希望这可以帮助您解决问题,我当然帮助了我。今晚如果有蛆虫窥镜,我会很伤心的。

【讨论】:

  • gnu global 不支持 Python,grep utils 显然不是我要找的……为什么要链接到 pycscope 的源代码?
  • 为什么要单独使用$(ls **/*.py) 而不是**/*.py? zsh 中的 AFAIK 它们是等效的,并且都将扩展到所有子目录中的匹配文件列表。
  • 我决定给你赏金,因为你做了大量的研究试图帮助我解决这个问题。继续做好 SO
  • "something called vimentry" - 这是指 exVim,它有 your_project.vimentry 文件吗?这就是我通过谷歌搜索所能找到的全部内容。
【解决方案2】:

这似乎对我有用:

切换到 Python 代码的顶层目录。创建一个名为cscope.files的文件:

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

cscope -R

如果没有正确构建交叉引用,您可能需要先执行cscope -b

【讨论】:

  • 很棒的提示!对我来说也适用于 PHP:(“vim 中的 PHP 和 cscope”):find . -name '*.php' > cscope.files && cscope -Rb -- -b 用于保存结果(在 cscope.out 中并在 vim 中使用它们)。
【解决方案3】:
  1. 根据与cscope 的维护者的通信,该工具并非设计用于与 Python 一起使用,并且没有计划实现这种兼容性。无论现在有效,显然都是错误的,并且没有任何保证它会继续有效。
  2. 看来我一直在使用过期版本的pycscopecscope DB 支持最新版本 0.3。 pycscope 的作者告诉我,他通过阅读cscope 的源代码弄清楚了cscope DB 的输出格式。没有记录该格式,但它目前适用于 pycsope 0.3,这是我将使用的解决方案。

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

【讨论】:

  • 耸耸肩 你想要一个 cscope 的替代品,那就是 idutils。他们执行类似的任务。
  • @chiggsy:AFAIU idutils 是grep 的替代品,而不是cscope 的替代品
【解决方案4】:

有一个很棒的Python-mode-klen 插件。如果您安装了它并安装了rope(python 重构库),那么转到特定术语的定义就像<C-c>g<C-c>rag 一样简单(第一个是文件类型映射,第二个是全局映射)。还有更多有用的功能,有些对我来说没用。所有这些都是禁用的。来自cscope-intro 的问题列表中的功能:

  1. 这个符号在哪里使用? f。虽然相当混乱,因为 quickfix 列表中的结果确实显示 - 而不是实际的行(尽管它们指向正确的位置)。也许它会被修复。
  2. 在哪里定义?这个全局符号的定义是什么?这个函数在源文件的哪里? g
  3. 什么是<...>全局符号的定义? raj

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

【讨论】:

【解决方案5】:

我遇到了和你一样的问题,在浏览了互联网之后,我找到了解决这个问题的方法:

创建一个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 是可以接受的:)

【讨论】:

    【解决方案6】:

    这个 hack 似乎也迫使 cscope 遍历 Python 文件:

    cscope -Rb -s *
    

    如果您接受 cscopeapparently not designed to work with Python

    超集任何语言任何工具问题:How to find all occurrences of a variable in Vim?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2011-01-25
      相关资源
      最近更新 更多