【问题标题】:Vim, Python, and Django autocompletion (pysmell?)Vim、Python 和 Django 自动补全(pysmell?)
【发布时间】:2010-11-01 23:51:27
【问题描述】:

有谁知道如何设置自动完成以与 python、django 和 vim 很好地配合使用?

我一直在尝试使用 pysmell,但我似乎无法正确设置它(或者我可能不知道它是如何工作的)。现在,我在 django 目录中运行 pysmell(我正在使用主干)并将生成的标签移动到我的项目目录中,然后我也在项目目录中运行 pysmell。不过,Vim 不会选择 django 标签,它们也不会自动完成。

有谁知道如何在 vim 中设置自动完成功能,以便完成长 django 函数(如 get_object_or_404)以及我自己代码中的类/函数?我在谷歌上四处寻找,但没有找到任何好的资源。

谢谢。

【问题讨论】:

标签: python django vim


【解决方案1】:


(来源:dispatched.ch

您可以设置带有缓冲区、缓冲区显示、自动完成,甚至 Py Doc 显示的 VIM。

Here you go

【讨论】:

    【解决方案2】:

    正如我在其他地方所写的那样,我开发了 Jedi。我真的认为它比所有现有的解决方案(甚至是 PyCharm)都要好得多。

    https://github.com/davidhalter/jedi-vim

    它是基于 pythoncomplete 构建的,而且功能更强大!

    适用于复杂代码:

    并具有附加功能:

    所有可能的功能都有一个列表:

    • 内置函数/类支持
    • 复杂的模块/函数/类结构
    • 忽略语法和缩进错误
    • 多重回报/收益
    • 元组赋值/数组索引/字典索引
    • 异常/with-statement
    • *args / **kwargs
    • 装饰器
    • 描述符 -> 属性/静态方法/类方法
    • 关闭
    • 生成器(yield 语句)/迭代器
    • 支持一些魔术方法:__call____iter____next____get__, __getitem__, __init__
    • 支持 list.append、set.add、list.extend 等。
    • (嵌套)列表推导/三元表达式
    • 相对导入
    • getattr() / __getattr__ / __getattribute__
    • 函数注释(py3k 特性,现在被忽略,但正在被解析。 我不知道该怎么处理它们。)
    • 类装饰器(py3k 功能,也被忽略,直到我找到用处 案例,这不适用于绝地)
    • 简单/通常的sys.path 修改
    • isinstance 检查 if/while/assert

    【讨论】:

    • 太棒了。你忘了回答这个问题 - 如何安装它?你的 github 页面上也没有指南。
    • 它假设你知道什么是病原体并且你知道如何安装它。我花了一些谷歌搜索来设置插件(顺便说一句很棒)。
    【解决方案3】:

    今天,您在 vim 中不需要特殊的 django 自动完成扩展。确保你有支持 python 的 vim。 要检查它,请输入 xterm:

    vim --version|grep python

    输出:

    +python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +signs ... ...

    要使工作自动完成,请在 .vimrc 中添加以下行:

    autocmd FileType python set omnifunc=pythoncomplete#Complete

    如果有(“python”)

    python 导入系统,操作系统

    python sys.path.append('/home/sergey/workspace/django')

    python os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoProject.settings'

    结束

    地点:

    • sys.path.append 是 django 工作区目录的路径
    • djangoProject 是您的 django 项目的名称,位于“/home/sergey/workspace/django”之后

    最后保存并重启vim。现在,在 '.' 之后,按默认的 ctrl-x ctrl-o 即可获得自动完成功能。

    【讨论】:

      【解决方案4】:

      首先,感谢您提出这个问题,因为它迫使我自己解决这个问题,这很棒!

      这是我用作参考的页面:PySmell v0.6 released : orestis.gr

      1. 使用setup.py install 命令安装 PySmell。
      2. 通过转到site-packages/django 目录并运行:pysmell . -o ~/PYSMELLTAGS.django 为 django 生成 PYSMELLTAGS 文件
      3. 将该文件复制到您的项目目录,然后运行pysmell . 以生成项目PYSMELLTAGS 文件
      4. 确保 pysmell 在您的 PYTHONPATH (export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/) 中
      5. 运行 vim (vim .)
      6. 来源pysmell.vim (:source /path/to/pysmell/pysmell.vim)
      7. 设置自动完成命令 (:set omnifunc=pysmell#Complete)
      8. 键入 ^x^o 以自动完成,它应该可以工作

      我意识到这不是一个可持续的解决方案,但您应该能够以此为起点,让它始终工作(例如,将导出添加到您的 .bashrc,将 :source 添加到您的 .vimrc,设置autocmd FileType python set omnifunc=pysmell#Complete等)

      让我知道这是否足以让您入门。它对我有用!

      编辑 我只是将它添加到我的 .vimrc 中,只要 PYSMELLTAGSPYSMELLTAGS.django 文件在我的项目根目录中,它就可以正常工作而无需任何其他工作:

      python << EOF
      import os
      import sys
      import vim
      sys.path.append("/usr/local/python/lib/python2.5/site-packages")
      EOF
      exe ":source ~/src/pysmell/pysmell.vim"
      autocmd FileType python set omnifunc=pysmell#Complete
      

      【讨论】:

      • 我几乎做到了这一点,但似乎无法让它发挥作用。唯一的区别是 pysmell.vim 在我的 ~/.vim/plugins 目录中,所以我不需要在 vimrc 中获取它。但是,看起来自动完成仍然无法正常工作。为了测试它,我打开一个像 test.py 这样的 python 文件并执行类似“from django.shortcuts import get_object_or_404”之类的操作,然后在下一行我输入“get_”和 ^x^o,它说它可以找不到要自动完成的内容。我用错了吗?
      • 不确定是否是拼写错误,但如果不是,我相信插件目录是 .vim/plugin 而不是 .vim/pluginS。仔细检查一下,它可能会解决您的问题。
      • 是的,当我在这里输入时,这是我的错字:pysmell.vim 正在获取来源,但它仍然无法工作:(。你必须按任何东西(如 F2)来更新导入后在pysmell中添加标签?我认为您不必这样做,而且我显然尝试了F2无济于事。
      • 伙计们,现在已经 4 年了。 Pysmell 仍然是 vim django 支持的首选解决方案吗?
      【解决方案5】:

      为此,我很幸运使用 exuberant-ctags。

      我在我的 vimrc 中使用了这个宏:

      执行 'map :!/usr/bin/exuberant-ctags -f '.&tags.' --recurse '.$_P4ROOT.' '

      您需要稍微修改一下,使其包含您的 python /site-packages/django/ 目录以及您自己的代码。

      然后,在 vim 中按 F2 来更新标签,并使用常规的 vim 标签绑定来导航。

      【讨论】:

        猜你喜欢
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        • 2014-05-18
        • 1970-01-01
        相关资源
        最近更新 更多