Vim,Python和Django自动完成(pysmell?)

时间:2009-06-10 23:35:16

标签: python django vim

有没有人知道如何设置自动完成功能以便与python,django和vim很好地协同工作?

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

有没有人知道如何在vim中设置自动完成,以便它将在我自己的代码中完成长django函数(如get_object_or_404)以及类/函数?我在谷歌上搜索过但没有找到任何好的资源。

感谢。

5 个答案:

答案 0 :(得分:30)

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

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

  1. 使用setup.py install命令安装PySmell。
  2. 转到PYSMELLTAGS目录并运行:site-packages/django
  3. ,为django生成pysmell . -o ~/PYSMELLTAGS.django文件
  4. 将该文件复制到项目目录,然后运行pysmell .以生成项目PYSMELLTAGS文件
  5. 确保pysmell在PYTHONPATHexport PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/
  6. 运行vim(vim .
  7. 来源pysmell.vim:source /path/to/pysmell/pysmell.vim
  8. 设置自动完成命令(:set omnifunc=pysmell#Complete
  9. 键入^ x ^ o以自动完成,它应该可以正常工作
  10. 我意识到这不是一个可持续的解决方案,但您应该能够将其作为开始使其设置始终有效(例如,将导出添加到.bashrc,将:source添加到.vimrc,设置autocmd FileType python set omnifunc=pysmell#Complete等。)

    请告诉我这是否足以让您入门。它对我有用!

    修改 我只是将它添加到我的.vimrc中,只要PYSMELLTAGS& PYSMELLTAGS.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
    

答案 1 :(得分:13)

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

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

它建立在pythoncomplete之上,功能更强大!

适用于复杂的代码:completion

还有其他功能: enter image description here

列出了所有可能的功能:

  • 内置函数/类支持
  • 复杂的模块/功能/类结构
  • 忽略语法和缩进错误
  • 多次退货/收益
  • 元组赋值/数组索引/字典索引
  • 例外/ with-statement
  • * args / ** kwargs
  • 装饰
  • descriptors - &gt; property / staticmethod / classmethod
  • generators(yield语句)/ iterators
  • 支持一些神奇方法:__call____iter____next____get____getitem____init__
  • 支持list.append,set.add,list.extend等。
  • (嵌套)列表理解/三元表达式
  • 相对进口
  • getattr() / __getattr__ / __getattribute__
  • 功能注释(py3k功能,现在被忽略,但被解析。 我不知道该怎么办。)
  • 类装饰器(py3k功能,也被忽略,直到我找到一个用途 案例,与Jedi不兼容)
  • 简单/通常sys.path修改
  • isinstance检查if / while / assert

答案 2 :(得分:12)

alt text
(来源:dispatched.ch

您可以使用缓冲区,缓冲区显示,自动完成,甚至Py Doc显示来设置VIM。

Here you go

答案 3 :(得分:3)

我为这个充满热情的ctags运气好了。

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

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

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

然后,在vim内点击F2以更新标签,并使用常规vim标签绑定进行导航。

答案 4 :(得分:2)

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

vim --version | grep python

输出:

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

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

  

autocmd FileType python set omnifunc = pythoncomplete#Complete

     

如果有(“python”)

     

python import sys,os

     

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

     

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

     

ENDIF

其中:

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

最后,保存并重新启动vim。现在,在'。'之后,按默认ctrl-x ctrl-o来获取自动完成功能。