我在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
我究竟做错了什么?
更新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了,并且无法测试这些建议的效果如何.
什么模块包含您要完成的符号?它在python stdlib中吗?或者它是第三方模块?
确保模块/包在PYTHONPATH中.
在Vim中,执行:
:python import sys :python print sys.path
要添加模块的目录:
:python sys.path.append("/path/to/directory/")
由于你是谨慎的并确保你的代码可以通过PYTHONPATH访问,根据代码的建议,你是否有可能遇到import
Vim Python omni-complete的错误?自Vim 7.2.245起,此错误仍然存在.
基本上,如果任何 import语句在您正在使用的文件中失败,无论它是否包含在Try-Except
子句中,它都将完全破坏omni-completion.检查这一点应该相当容易,因为大多数导入都发生在文件的最开头.
如果您确定此错误是导致您的麻烦的原因,您的选择包括:
确保导入的模块位于系统路径上,而不仅仅是项目文件
评论任何import
失败的陈述
修复bug
使用ropevim作为完成方法
使用不同的编辑器; Netbeans IDE有Python支持,如果你是像我这样的Vim上瘾者的jVi插件相当不错(不要让20世纪90年代的主页愚弄你)
听起来好像提问者早已走向黑暗的一面*,但是为了它的价值我只是有这种症状,而在我的情况下,原因是我使用的模块依赖于Python 2.7但是我的Vim版本是用Python 2.5编译.
诊断我试过:python import mymodule
,但由于导入依赖模块的错误而失败.然后:python import dependentmodule
在链中的下一步失败了.依此类推,直到尝试导入自Python 2.7以来的新系统模块失败.发现问题.
要解决,我就是这么做的sudo port install vim +python27
.但这适用于OSX.因人而异.
(*我在开玩笑.Emacs用户是我们的朋友.这是人们在记事本中编程我们都要保存......)