有没有办法让python omnicomplete与vim中的非系统模块一起使用?

时间:2008-10-13 22:08:27

标签: python vim omnicomplete

我唯一可以使用python omnicomplete来处理的是系统模块。我现在正在处理的网站包或模块中的模块没有任何帮助。

6 个答案:

答案 0 :(得分:3)

一旦我为我的某个网站包生成了ctags,它就开始为该软件包工作 - 所以我猜测omnicomplete函数依赖于非sys模块的ctags。

编辑:完全没有。

这就是问题 - 我的测试不好 - omnicomplete WAS正在为我的项目的某些部分工作,而不是大部分工作。

问题在于我正在开发一个django项目,为了导入django.db,你需要设置一个环境变量。由于我无法导入django.db,所以从django.db继承的任何类或任何导入从django.db继承的类的模块都无法完成。

答案 1 :(得分:2)

今晚在Python reddit上遇到过这个问题:PySmell。看起来像你在寻找什么。

  

PySmell是一个python IDE完成助手。

     

它尝试静态分析Python源代码,而不执行它,并生成有关IDE工具可以使用的项目结构的信息。

答案 2 :(得分:2)

我在PYTHONPATH或site-packages中完成了我自己的模块。我不确定您使用的是哪个版本的pythoncomplete.vim脚本,但您可能希望确保它是最新的。

编辑:以下是我在系统中看到的一些例子......

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

myvar = 'test'

def myfunction(foo='test'):
    pass

class MyClass(object):
    pass

答案 3 :(得分:2)

虽然重要的是要注意您必须正确设置PYTHONPATH环境变量,但根据上一个答案,有一个值得注意的bug in Vim which prevents omnicompletion from working when an import fails。从Vim 7.2.79开始,这个bug还没有修复。

答案 4 :(得分:2)

故障排除提示:验证您尝试全向完成的模块是否可由VIM导入。我有一些VIM不喜欢的语法正确的Python:

:python import {module-name}
 Traceback (most recent call last):
   File "<string>", line 1, in ?
   File "modulename/__init__.py", line 9
     class empty_paranthesis():
                            ^
 SyntaxError: invalid syntax

案例分析,从我的类定义中删除括号允许VIM导入模块,随后该模块上的OmniComplete开始工作。

答案 5 :(得分:0)

我想你的pydiction脚本之后。它允许您将自己的东西和网站包添加到omni完成。

在你的时候,将以下内容添加到你的python.vim文件......

 set iskeyword+=.

这将让您自动完成包裹功能,例如如果你输入......

 os.path.

然后[CTRL] [N],您将获得os.path的函数列表。