Vim Python完成
我在Vim和Python完成方面遇到了问题。 事实上,我完全搞不懂这是怎么回事 我在Windows7上有通用的GVIM7.3(使用python/dyn) 我正在使用SuperTab插件,还有很多其他插件,其中一些 是特定于python的,在vimrc中有以下设置:Vim Python完成,python,vim,omnicomplete,Python,Vim,Omnicomplete,我在Vim和Python完成方面遇到了问题。 事实上,我完全搞不懂这是怎么回事 我在Windows7上有通用的GVIM7.3(使用python/dyn) 我正在使用SuperTab插件,还有很多其他插件,其中一些 是特定于python的,在vimrc中有以下设置: au FileType python set omnifunc=pythoncomplete#Complete let g:SuperTabDefaultCompletionType = "context" let g:SuperTa
au FileType python set omnifunc=pythoncomplete#Complete
let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabContextDefaultCompletionType = "<c-n>"
问题是,若对导入行进行注释,则完成工作(a.建议getX和pr)。但这里有一个输入numpy.random,完成刹车。
注意:当我运行代码时,此导入正常工作
Python完成的先决条件是什么?
发生了什么,我应该做些什么来完成Python的工作
由于我(相对)不熟悉Vim,任何建议都非常感谢
编辑:
问题似乎在于在导入中使用a.b表单。如果我从numpy import random执行,则一切正常。如果这是合理容易修复,我想让a.b从工作也。但现在我知道如何绕过它,这就不那么重要了
还有像这样不寻常的问题吗?这样我就知道将来会发生什么事了。Python是一种非常动态的语言,不适合自己完成。没有任何真正好的完成。在我看来,没有它的生活要比解决它的所有问题容易得多。也就是说,就像新禁欲主义者所说的那样,这真是太棒了。pythoncomplete相当古老,而且没有维护 尝试使用绝地武士: 它最初是一个改进的pythoncomplete,但现在功能更强了 它适用于复杂代码: 并具有以下附加功能: 这里列出了所有可能的功能:
- 内置函数/类支持
- 复杂的模块/函数/类结构
- 忽略语法和缩进错误
- 多重收益/收益率
- 元组分配/数组索引/字典索引
- 例外情况/声明
- *args/**kwargs
- 装饰师
- 描述符->属性/静态方法/类方法
- 闭包
- 生成器(收益语句)/迭代器
- 支持一些神奇的方法:
,\uuuuuuuuuuuuuuuuuuu
,\uuuuuuuuuuuuuuuuu
下一步,
,\uuuuuuuuu获取
,获取项目
初始化
- 支持list.append、set.add、list.extend等
- (嵌套)列表理解/三元表达式
- 相对进口
/getattr()
/\uuuu getattr\uuuu
\uuuu getattribute\uuuu
- 函数注释(py3k)功能现在被忽略,但正在解析。 我不知道该拿他们怎么办。)
- 类装饰器(py3k)特性也被忽略,直到我找到一个用途 凯斯,这对绝地武士不起作用)
- 简单/常用
修改sys.path
检查if/while/assertisinstance
,
或者仅仅是
和
?这些完成对我来说很好。与你的问题没有太大关系,但是为什么你使用getter而不是properties?你是否提出了这个问题的Bug修复,因为它很容易复制。是的,python是动态的,但是你也可以在程序运行时反省运行程序的一切,这将非常有助于完成任务。是的,运行你的程序来完成任务,听起来是个好主意。自从这篇文章发表后,我发现了绝地武士,另外两个人也给出了更好的答案。它可以进行静态分析,非常棒。我只是在表达解释语言的力量。我并不是建议实际运行代码以获得完整性。编译成目标代码后遍历AST肯定是提供功能的一种方式。只要模块加载过程不会产生不必要的副作用,即使加载模块来检查可用的模块也是一个不错的选择。这在某些语言中是合理的,但Python不是其中之一,因为加载任何代码都可以执行任意代码。
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