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
- 使用
setup.py install
命令安装PySmell。 - 通过转到您的
site-packages/django
目录并运行:pysmell . -o ~/PYSMELLTAGS.django
为django生成PYSMELLTAGS
文件pysmell . -o ~/PYSMELLTAGS.django
pysmell . -o ~/PYSMELLTAGS.django
- 将该文件复制到您的项目目录,然后运行
pysmell .
生成项目PYSMELLTAGS文件 - 确保pysmell在你的
PYTHONPATH
(export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/
) - 运行vim(
vim .
) - 源代码
pysmell.vim
(:source /path/to/pysmell/pysmell.vim
) - 设置自动完成命令(
:set omnifunc=pysmell#Complete
) - 键入^ x ^ o自动完成,它应该工作
我意识到这不是一个可持续的解决scheme,但你应该能够使用它作为一个开始让它设置始终工作(例如,添加导出到您的.bashrc,添加:源到您的.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
正如我在其他地方写的,我发展了绝地。 我真的认为它比所有现有的解决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来获得自动完成。