有没有办法让Vim中的Python omnicomplete与非系统模块一起工作?

9 投票
6 回答
5047 浏览
提问于 2025-04-11 09:32

我发现Python的自动补全功能只能在系统自带的模块上正常工作。对于我在site-packages里的模块或者我现在正在写的模块,自动补全一点帮助都没有。

6 个回答

2

今晚在Python的reddit上看到这个:PySmell。看起来正是你需要的东西。

PySmell是一个帮助Python编程环境(IDE)自动补全的工具。

它会在不运行代码的情况下,静态分析Python源代码,并生成关于项目结构的信息,这些信息可以被编程环境工具使用。

3

我之前为我的一个网站包生成了ctags,结果这个包就开始正常工作了。所以我猜测,omnicomplete这个功能在处理非系统模块时是依赖于ctags的。

补充说明:这根本不是真的。

问题出在我自己测试不够仔细——其实omnicomplete在我项目的某些部分是有效的,只是大部分地方不行。

问题是我在做一个django项目,而要导入django.db,你需要设置一个环境变量。因为我无法导入django.db,所以任何从django.db继承的类,或者导入了从django.db继承的类的模块,都无法完成自动补全。

2

我在自己的PYTHONPATH或者site-packages里得到了模块的自动补全。我不太确定你使用的pythoncomplete.vim脚本是什么版本,但你可能需要确认一下是不是最新的。

编辑:这里是我在系统上看到的一些例子……

这个文件(mymodule.py),我放在了PYTHONPATH里的一个目录下,然后又放在了site-packages里。两次我都能得到下面的截图。

myvar = 'test'

def myfunction(foo='test'):
    pass

class MyClass(object):
    pass

撰写回答