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

有谁知道如何设置自动完成与python,django和vim很好地工作?

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

有谁知道如何在vim中设置自动完成function,以便在我自己的代码中完成long django函数(如get_object_or_404)以及类/函数? 我在谷歌上search,但没有find任何好的资源。

谢谢。

首先,谢谢你提出这个问题,因为它迫使我自己想出来,这太棒了!

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

  1. 使用setup.py install命令安装PySmell。
  2. 通过转到您的site-packages/django目录并运行: pysmell . -o ~/PYSMELLTAGS.django为django生成PYSMELLTAGS文件pysmell . -o ~/PYSMELLTAGS.django pysmell . -o ~/PYSMELLTAGS.django
  3. 将该文件复制到您的项目目录,然后运行pysmell . 生成项目PYSMELLTAGS文件
  4. 确保pysmell在你的PYTHONPATHexport 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自动完成,它应该工作

我意识到这不是一个可持续的解决scheme,但你应该能够使用它作为一个开始让它设置始终工作(例如,添加导出到您的.bashrc,添加:源到您的.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 

替代文字wp-content/uploads/2009/05/vim-as-python-ide.png

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

干得好

正如我在其他地方写的,我发展了绝地。 我真的认为它比所有现有的解决scheme(甚至PyCharm)都要好得多。

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

它build立在pythoncomplete上,function更加强大!

它适用于复杂的代码: 完成

并具有附加function: 在这里输入图像说明

有一个所有可能的function列表:

  • 内置函数/类支持
  • 复杂的模块/function/类结构
  • 忽略语法和缩进错误
  • 多重收益/收益
  • 元组赋值/数组索引/字典索引
  • 例外/与声明
  • * args / ** kwargs
  • 装饰
  • 描述符 – > property / staticmethod / classmethod
  • closures
  • 生成器(yield语句)/迭代器
  • 支持一些神奇的方法: __next__ __get__ __iter____next__ __get__ __iter____next__ __get__ __iter____next__ __get__ __iter____next__ __get__ __iter____next__ __init__
  • 支持list.append,set.add,list.extend等
  • (嵌套)列表推导/三元expression式
  • 相对import
  • getattr() / __getattr__ / __getattribute__
  • 函数注释(py3kfunction,现在被忽略,但被parsing,我不知道该怎么处理它们)。
  • 类装饰器(Py3k的function,也被忽略,直到我find一个用例,这与杰迪不工作)
  • 简单/通常的sys.path修改
  • isinstance检查if / while / assert

为此,我已经有了好运气。

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

执行'map:!/ usr / bin / exuberant-ctags -f'。&tags。'  - 推翻'$ _ P4ROOT'。  “

你会想稍微修改一下,这样它就包含了你的python / site-packages / django /目录以及你自己的代码。

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

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

vim –version | grep python

输出:

+ python -python3 + quickfix + reltime + rightleft -ruby + scrollbind +标志……

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

autocmd FileType python set omnifunc = pythoncomplete#完成

如果有(“python”)

python import sys,os

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

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

万一

哪里:

  • sys.path.append是你的django工作区目录的path
  • djangoProject是你的django项目的名字,它刚好在'/ home / sergey / workspace / django'之后

最后,保存并重新启动vim。 现在,'。'后面,按下默认的ctrl-x ctrl-o来获得自动完成。