【问题标题】:Is there any way to get python omnicomplete to work with non-system modules in vim?有没有办法让 python omnicomplete 与 vim 中的非系统模块一起工作?
【发布时间】:2010-09-16 23:37:06
【问题描述】:

我唯一可以使用 python omnicomplete 的是系统模块。对于我当前正在处理的站点包或模块中的模块,我没有得到任何帮助。

【问题讨论】:

    标签: python vim omnicomplete


    【解决方案1】:

    一旦我为我的一个站点包生成了 ctags,它就开始为那个包工作——所以我猜测,omnicomplete 函数依赖于非 sys 模块的 ctags。

    编辑:完全不正确。

    这就是问题所在——我的测试很糟糕——omnicomplete WAS 适用于我的部分项目,但不是大部分。

    问题是我正在处理一个 django 项目,为了导入 django.db,您需要设置一个环境变量。由于我无法导入 django.db,任何从 django.db 继承的类,或任何导入从 django.db 继承的类的模块都不会完成。

    【讨论】:

    • 我遇到了同样的问题,除了应用引擎库,而不是 django...感谢您帮助我解决问题
    • 现在又遇到了几次这个问题,我总是做的第一件事是尝试在香草解释器中导入模块,这似乎总是显示错误在哪里。如果您多次使用 django 或应用程序引擎或其他程序,它们会以与解释器不同的顺序导入,这可能会导致问题。
    【解决方案2】:

    我在我的 PYTHONPATH 或站点包中完成了我自己的模块。我不确定您使用的是哪个版本的 pythoncomplete.vim 脚本,但您可能需要确保它是最新版本。

    编辑:这是我在系统上看到的一些示例...

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

    myvar = 'test'
    
    def myfunction(foo='test'):
        pass
    
    class MyClass(object):
        pass
    

    【讨论】:

    • 我刚刚下载了最新版本——不走运!你是如何启用它的?你也在使用 CTAG 吗?
    • 你是如何测试它的?尝试只输入“import sys”之类的内容,然后执行“sys.
    • 正如我上面所说,系统模块omnicomplete 就好了。我没有完成的是我的站点包中的模块。
    • 是的,我明白了。我只是想知道你是如何测试它的。我所有的个人模块以及站点包都可以工作。
    • 啊。是的。系统模块工作。您是否为您的站点包构建了 CTAG?你在哪个平台上?
    【解决方案3】:

    今晚刚刚在 Python reddit 上遇到了这个问题:PySmell。看起来像您要找的东西。

    PySmell 是一个 python IDE 完成助手。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        疑难解答提示:验证您尝试全方位完成的模块是否可以通过 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 开始工作。

        【讨论】:

          【解决方案6】:

          我认为你在 pydiction 脚本之后。它使您可以将自己的东西和站点包添加到omni complete。

          同时,将以下内容添加到您的 python.vim 文件中...

           set iskeyword+=.
          

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

           os.path.
          

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

          【讨论】:

            猜你喜欢
            • 2020-03-09
            • 1970-01-01
            • 2011-11-08
            • 2013-03-27
            • 2010-09-12
            • 1970-01-01
            • 2021-07-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多