Vim的Python自动补全就是无法使用
我在Stack Overflow和其他地方找了一个小时,结果还是没找到解决办法。真是太糟糕了!请帮帮我。Vim的自动补全功能就是不管用。
我用的是支持Python的Vim 7.2。
我的
.vimrc
里有filetype plugin on
这行代码。当我打开一个
.py
文件时,输入:echo &omnifunc
会显示pythoncomplete#Complete
。我在做一个大项目,并且有一个用
exuberant-ctags
生成的tags
文件。这个文件在Vim的ctags
路径下。我可以通过在一个符号上按^]来测试,它会带我去那个符号的定义。更新 1:我项目里的所有代码都在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会启动某种自动补全,输入pprint.
时会弹出菜单和快速参考,显示pprint
模块里的所有内容。不过,我自己模块的导入却没有被补全。
更新 4,一年后:我放弃了,转而学习Emacs。我已经去过黑暗的一面,那个神秘而充满魅力的地方,我告诉你,我找到了正确的道路。
更新 5,两年后:我又回到了Vim。Emacs很美,但即使在Emacs上用了1.5年,我在Vim上完成工作的速度还是更快。不过,我现在暂时不写Python了,所以无法测试这些建议的效果。
10 个回答
看起来提问的人已经走上了“黑暗面”,不过我也遇到过类似的问题。在我的情况下,问题出在我使用的一个模块需要 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的建议,是否有可能你遇到了import
在Vim中的自动补全错误? 这个错误在Vim 7.2.245版本中仍然存在。
简单来说,如果你正在编辑的文件中任何的import语句出错,不管它是否被放在了Try-Except
块里,这都会导致自动补全完全失效。检查这个问题应该比较简单,因为大多数import语句都是放在文件的开头。
如果你确定这个错误是导致你麻烦的原因,你可以考虑以下几种解决办法:
你想要完成的符号是在哪个模块里的?它是在Python自带的库里吗?还是说是一个第三方的模块?
确保这个模块或包在PYTHONPATH里面。
在Vim中,你可以这样做:
:python import sys
:python print sys.path
要添加模块的目录,可以这样:
:python sys.path.append("/path/to/directory/")