Vim的Python Omnicompletion不起作用

我search了一个小时,堆栈溢出和其他地方。 唉! 请帮忙。 Vim的omnicompletion只是不起作用

  1. 我有Vim 7.2与Python支持编译。

  2. filetype plugin on是在我的.vimrc

  3. .py文件打开时, :echo &omnifunc打印pythoncomplete#Complete

  4. 我正在处理一个大型项目,并使用exhuberant-ctags生成了一个tags文件。 这是在Vim的ctagspath中。 我可以通过在符号上键入^]来testing它,然后我将其带到符号的定义中。

  5. 更新1:我所有的项目代码都在python-in-Vim的path中。 我可以:python import myproject成功:python import myproject

现在,在我尝试Cx Co的地方,我所得到的是:

 -- Omni completion (^O^N^P) Pattern not found 

我究竟做错了什么?

更新2:当我在模块级inputCx Co Cn时,Vim将显示一个完成popup窗口,其中包含我项目中其他模块的几个模块级常量。 但它只是常量(符号大写字母),并且完成在其他任何地方都不起作用。

更新3:我发现文件顶部的Cx Co启动某种omnicompletion,并完成pprint. 调出pprint模块中所有内容的菜单和快速参考。 但是,我自己的模块没有import正在完成。

一年后更新4:我放弃了,学习了Emacs。 我去过黑暗的一面,阴谋和香料的神秘之地,我告诉你,我find了路。

两年后的更新5:我回到了Vim。 Emacs很漂亮,但即使经过了1.5年的Emacs,我仍然能够更快地完成Vim的工作。 现在我已经停止编写Python,并且无法testing这些build议的效果。

哪个模块包含您正在尝试完成的符号? 它是在Python的stdlib? 或者它是第三方模块?

确保模块/包装在PYTHONPATH中。

在Vim中,做:

 :python import sys :python print sys.path 

要添加模块的目录:

 :python sys.path.append("/path/to/directory/") 

听起来像提问者已经走到了黑暗的一边*,但是对于我刚刚出现这种症状的价值,在我的情况下,原因是我使用的模块依赖于Python 2.7,但是我的Vim版本是用Python 2.5编译。

诊断我试过了:python import mymodule ,其中失败了一个有关导入依赖模块的错误。 然后:python import dependentmodule失败,在链中的下一步。 等等,直到它失败,试图导入自Python 2.7以来新的系统模块。 发现问题。

为了解决,我只是做了sudo port install vim +python27 。 但是这是OSX。 因人而异。

(*我在开玩笑,Emacs用户是我们的朋友,这是记事本中的人员编程,我们都必须保存…)

既然你是谨慎的,并确定你的代码是可以通过PYTHONPATH,按照codeape的build议,是否有可能运行到Vim Python omni-complete的import bug ? 这个bug在Vim 7.2.245中仍然存在。

从本质上讲,如果你正在使用的文件中有任何导入语句失败,不pipe它是否被包含在一个Try-Except子句中,它将完全破坏全向完成。 检查这个应该相当容易,因为大多数导入都是在文件的开头。

如果你确定这个bug是你的麻烦的原因,你的select包括:

  • 确保您导入的模块位于系统path中,而不仅仅是项目文件
  • 评论任何失败的import报表
  • 修复错误
  • 使用ropevim作为完成方法
  • 使用不同的编辑器; Netbeans IDE支持Python, jVi插件相当不错,如果你是像我这样的Vim成瘾者(不要让20世纪90年代的主页欺骗你)

更新到Fedora 16(但仍然从源代码编译vim),omni完成停止工作与上面相同的消息。 我通过重新映射键来“固定”它。

 inoremap <C-space> <Cx><Co> 

~/.vimrc ,现在它再次工作。

我有一个类似的问题omni完成不工作。 在我看来,minibufexpl.vim插件干扰了omni完成。 以下是我的发现:

普通关键字完成工作。 Omni完全不适用于任何语言,不仅仅是Python。 omn​​ifunc设置正确。 我CX CX后,没有任何反应。 我做“:py打印全局()”,很明显,pythoncomplete没有加载。 我可以“:调用pythoncomplete#完成(1,'')”,并看到它加载。 对我来说,这就排除了它是一个Vim问题。 看起来有些事情正在干扰keymapping或者截取omni完成请求。 所以我开始逐个禁用我的插件。 事实certificate,在我的情况下,罪魁祸首是“minibufexpl”。 我有github的Holgado版本。

根据github上的问题跟踪器,MBE看起来有许多开放性的问题,自2012年初以来,还没有任何进展。我现在只是要禁用它,所以我可以使用自动完成。 与此同时,我只是添加以下内容到我的vimrc同时打开多个修改后的缓冲区,并使用一个简单的按键序列循环它们(MBE更智能地select缓冲区循环但似乎过于强调一个简单的问题):

 set hidden noremap <C-TAB> :bnext<CR> noremap <CS-TAB> :bprev<CR> 

你有没有尝试过使用<C_x><C-]>

cx cn用于获取对象的成员列表。

我用supertab(http://www.vim.org/scripts/script.php?script_id=1643);

由于Cx Co使用起来有点令人沮丧

在.vimrc中:

 let g:SuperTabDefaultCompletionType = "<cx><co>" 

那么只需使用Tabb来实现omnicompletion

如果你正在使用python2,确保你

 sudo apt-get install vim.nox-py2 

并使用vim.nox-py2代替vim。