Vim、Python 和 Django 的自动补全(pysmell?)
有没有人知道怎么在python、django和vim中设置自动补全功能,让它们配合得更好?
我一直在尝试使用pysmell,但似乎没能正确设置(或者我可能不太明白它是怎么工作的)。现在,我在django的目录下运行pysmell(我在用主干版本),然后把生成的标签移动到我的项目目录里,接着我又在项目目录下运行pysmell。不过,vim并没有识别到django的标签,所以自动补全也没有用。
有没有人知道怎么在vim中设置自动补全,这样它不仅能补全django的长函数(比如get_object_or_404),还可以补全我自己代码中的类和函数?我在谷歌上查了很多,但没有找到好的资源。
谢谢。
5 个回答
正如我在其他地方提到的,我开发了Jedi。我真的觉得它比现有的所有解决方案(甚至是PyCharm)都要好得多。
https://github.com/davidhalter/jedi-vim
它是基于pythoncomplete构建的,功能强大得多!
它可以处理复杂的代码:
而且还有额外的功能:
这里有一个所有可能功能的列表:
- 支持内置函数和类
- 处理复杂的模块、函数和类结构
- 可以忽略语法和缩进错误
- 支持多个返回值和生成器
- 支持元组赋值、数组索引和字典索引
- 处理异常和with语句
- 支持可变参数(*args)和关键字参数(**kwargs)
- 支持装饰器
- 支持描述符,比如属性、静态方法和类方法
- 支持闭包
- 支持生成器(yield语句)和迭代器
- 支持一些魔法方法,比如
__call__
、__iter__
、__next__
、__get__
、__getitem__
、__init__
- 支持列表的append、集合的add、列表的extend等操作
- 支持(嵌套的)列表推导和三元表达式
- 支持相对导入
- 支持
getattr()
、__getattr__
和__getattribute__
- 支持函数注解(这是Python 3的特性,目前被忽略,但正在解析中。我还不知道该怎么处理它们。)
- 支持类装饰器(也是Python 3的特性,目前也被忽略,直到我找到一个不适用于Jedi的用例)
- 简单的
sys.path
修改 - 支持
isinstance
检查,用于if、while和assert语句
首先,感谢你提出这个问题,因为这让我自己也搞清楚了这个事情,真是太好了!
这是我参考的页面: PySmell v0.6 发布 : orestis.gr
- 使用
setup.py install
命令来安装 PySmell。 - 通过进入你的
site-packages/django
目录,运行pysmell . -o ~/PYSMELLTAGS.django
来生成PYSMELLTAGS
文件。 - 把这个文件复制到你的项目目录,然后运行
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 来进行自动补全,这样应该就能工作了。
我知道这不是一个长期的解决方案,但你可以把这个当作一个开始,慢慢设置成可以一直使用的状态(比如,把 export 加到你的 .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