有人成功地在Python代码中使用cscope吗?我已经安装了VIM 7.2和最新版本的cscope,但它不能正确地检索我的代码标记(总是偏了几行)。我尝试了pycscope
脚本,但它的输出不被现代版本的cscope支持。
有什么想法吗?或者用于浏览Python代码的VIM替代品?(我特别对cscope提供的除ctags简单标记外的额外功能感兴趣)
编辑:我将逐步介绍该过程:
exuberant 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节中提到),作为使用gtags的可能快捷方式。您最终将获得一个ctags表格文件输入,Global/gtags可以解析以获取您的对象,或者您可以使用已知格式的ctags文件和pycscope源码一起来获得vim cscope命令的输入。
无论哪种方式,都很容易实现。
这肯定是可能的,因为
pypi上的z3c.recipe.tags
同时使用ctags和idutils为buildout创建标签文件,这是我将很快调查的方法。
当然,您始终可以使用下面的greputils脚本,它支持idutils,我们知道idutils与python兼容,如果失败,则还有一种名为vimentry的东西使用python、idutils和vim。
希望这可以帮助您解决问题,它确实帮助了我。如果没有Gnu global,今晚我会非常失落。
$(ls **/*.py)
而不是单独使用**/*.py
?据我所知,在zsh中它们是等效的,并且都会扩展到所有子目录中匹配文件的列表。 - Dave Kirbyyour_project.vimentry
文件吗?这是我从谷歌搜索中找到的全部内容。 - Mu Mind在我看来,这似乎起作用:
切换到您的 Python 代码的顶层目录。创建一个名为cscope.files
的文件:
find . -name '*.py' > cscope.files
cscope -R
你可能需要先执行 cscope -b
,如果交叉引用未能被正确构建。find . -name '*.php' > cscope.files && cscope -Rb
--
-b
用于保存结果(在cscope.out中并在vim中使用)。 - tron5<C-c>g
或<C-c>rag
一样简单(第一个是文件类型映射,第二个是全局映射)。还有更多有用的功能,对我来说有些是无用的。所有这些都可以禁用。在cscope-intro的问题列表中找到的功能:-
而不是实际行数(尽管它们指向正确的位置)。也许会被修复。这个技巧似乎还可以强制 cscope 浏览 Python 文件:
cscope -Rb -s *
如果你接受cscope显然不是为了与Python一起使用而设计的。
任何语言,任何工具的超集问题:如何在Vim中查找变量的所有出现?
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
是可以接受的:)
pycscope
的问题在于,cscope
使用的“DB”格式没有文档记录,并且根据cscope
的维护者所说,这是有意为之的。 - Eli Bendersky