我在Stack Overflow和其他地方搜索了一个小时.唉! 请帮忙.Vim的omnicompletion 不起作用.
我有使用Python支持编译的Vim 7.2.
filetype plugin on在我的.vimrc.
当.py文件打开时,:echo &omnifunc打印pythoncomplete#Complete.
我正在处理一个大型项目,并且我tags生成了一个文件exhuberant-ctags.这是在Vim的ctags路上.我可以通过^]在符号上键入来测试它然后我接受符号的定义.
更新1:我项目的所有代码都在python-in-Vim的路径中.我能:python import myproject成功.
现在,在我尝试的任何地方C-x C-o,我得到的只是:
-- Omni completion (^O^N^P) Pattern not found
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
更新2:当我C-x C-o C-n在模块级别键入时,Vim会显示一个完成弹出窗口,其中包含项目中其他模块的一些模块级常量.但它只是常量(符号大写字母),完成仍然无法在其他任何地方工作.
更新3:我发现C-x C-o在文件的顶部开始某种omnicompletion,并完成提示pprint.菜单和pprint模块中的所有内容的快速参考.但是,我自己的模块的导入都没有完成.
一年后更新4:我放弃并学习了Emacs.我去过黑暗的一面,神秘的阴谋和香料之地,我告诉你我找到了The Way.
两年后更新5:我回到了Vim.Emacs很漂亮,但即使经过1.5年的Emacs,我仍然可以更快地完成Vim的工作.但是,我现在已经停止编写Python了,并且无法测试这些建议的效果如何.
我在使用Vim和Python时遇到了麻烦.事实上,我很困惑这是如何工作的.
我在Windows 7上有通用的gvim 7.3(使用python/dyn)我正在使用SuperTab插件,其中一些是特定于python的,在vimrc中有以下设置:
au FileType python set omnifunc=pythoncomplete#Complete
let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabContextDefaultCompletionType = "<c-n>"
Run Code Online (Sandbox Code Playgroud)
我没有设置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
Run Code Online (Sandbox Code Playgroud)
问题是如果对导入行进行注释,则完成工作(a.<tab>建议使用getX和pr).但它有导入numpy.random,完成刹车.注意:当我运行代码时,此导入正常工作.
Python完成的先决条件是什么?发生了什么,我该怎么做才能完成Python的完成工作.
因为我(相对)是Vim的新手,所以任何建议都表示赞赏.
编辑: 似乎问题是在导入中使用ab表单.如果我从numpy导入随机,一切都很好.如果这很容易解决,我也想从中工作.但是现在我知道如何绕过它并不是那么重要.
是否有更像这样的不寻常的问题,以便我知道未来会发生什么?
我正在寻找一套插件,可以帮助我最终切换到vim全职.
现在我正在使用Komodo取得了一些成功,但他们的vim绑定有足够的错误,我已经厌倦了它.
不过,我在Komodo所喜欢的是代码完成.所以,这就是我正在寻找的(按重要性排序).
我一直在网上试图找到一种方法让VIM完成类似于PyDev的代码完成.它似乎不可能!
- 我试图使用此链接建议的omnicompletion:http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/ .
- 我已经尝试了几个插件来缓解这个问题,但没有工作.
"omnicomplete"功能不是我想要的.它只需要处理您正在处理的文件中的所有单词,并使用它们来尝试完成我正在做的事情.例如,如果我写道:
import numpy
a_single_array = range(100)
np.a#[then I hit cntrl+n to code complete]
Run Code Online (Sandbox Code Playgroud)
它会吐出"a_single_array"作为可能的完成 - 但这是荒谬的!这不是"numpy.a ......"的有效完成.
这是什么问题?所有插件都要做的就是从你所在的文件夹中运行一个dir(你要找的工作),然后过滤输出!这不是那么难!(我想你也必须阅读你正在编辑的文件,并过滤掉那个以注意名称的变化......但这就是它!)
说到它会有多容易......如果没有任何已经制作的东西,我本想考虑自己编写脚本!关于如何做的任何指南?
我正在寻找为gtk3 libs添加自动完成功能的可能性.我已经尝试过vim-jedi,因为它似乎是vim和python的最先进的自动完成机制(这里也推荐),但这对于从gi.repository导入的gtk3东西不起作用
from gi.repository import Gtk, GdkPixbuf, Gdk, GObject
Run Code Online (Sandbox Code Playgroud)
我看了一下gi.repository网站包.在那之后,我并不惊讶jedi无法对Gtk模块的方法进行内窥,因为这些模块在那里生成了很多魔法;-)
此外,像PyCharm这样的其他"真正的"IDE 也不支持以这种方式导入的模块的完成(我尝试过社区版,但我敢打赌专业版也不支持).
有没有人知道如何将自动完成添加到vim(偏好的解决方案)或其他编辑器/ IDE?
GObject,Gtk模块包含很多方法/类,并且不容易记住您需要的所有内容.此外,似乎只有gtk3的C api的文档,其中方法名称并不总是与python api中的相同...