我在 Vim 和 Python 补全方面遇到问题。 事实上,我很困惑这是如何工作的。
我有通用 gvim 7.3,在 Windows 7 上(使用 python/dyn) 我正在使用 SuperTab 插件等,其中一些 是特定于 python 的,在 vimrc 中有以下设置:
au FileType python set omnifunc=pythoncomplete#Complete
let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabContextDefaultCompletionType = "<c-n>"
我没有设置 PYTHONPATH 环境变量。
系统模块的完成工作正常。
起初我以为它对非系统根本不起作用 代码,但事实并非如此。 正在发生的事情最好在以下代码中显示:
import numpy.random # if this line is commented completion in last line works
class C(object):
def __init__(self, x_):
self.x=x_
def getX(self):
return self.x
def pr(self):
print 'ok'
a=C(10) # nothing changes if I put C() instead, even though it would be wrong
a. # here is completion in question
问题是如果导入行被注释,完成工作(a.
Python 完成的先决条件是什么? 发生了什么,我应该怎么做才能完成 Python 工作。
由于我(相对)是 Vim 的新手,任何建议都表示赞赏。
编辑: 似乎问题在于在导入中使用 a.b 形式。如果我从 numpy 导入随机,一切都很好。如果这很容易解决,我也想让 a.b 工作。但现在我知道如何绕过它,这并不那么重要。
还有像这样的不寻常的问题,让我知道 future 会发生什么吗?
最佳答案
pythoncomplete 相当陈旧且无人维护。
尝试使用绝地:https://github.com/davidhalter/jedi-vim 它最初是一个改进的 pythoncomplete,但现在更强大了!
适用于复杂代码:
并具有附加功能:
所有可能的功能都有一个列表:
- 内置函数/类支持
- 复杂的模块/函数/类结构
- 忽略语法和缩进错误
- 多重返回/ yield
- 元组赋值/数组索引/字典索引
- 异常/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
关于python - Vim Python 补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097299/