I've searched around for an hour, both on Stack Overflow and elsewhere. Alas! Please help. Vim's omnicompletion just doesn't work.
I have Vim 7.2 compiled with Python support.
filetype plugin on
is in my.vimrc
.When a
.py
file is open,:echo &omnifunc
printspythoncomplete#Complete
.I'm working with a large project and I have a
tags
file generated withexhuberant-ctags
. It's in Vim'sctags
path. I can test it by typing ^] on a symbol and I'm then taken to the symbols' definition.Update 1: All of my project's code is in the python-in-Vim's path. I can
:python import myproject
successfully.
Now, anywhere I try C-x C-o, all I get is:
-- Omni completion (^O^N^P) Pattern not found
What am I doing wrong?
Update 2: When I type C-x C-o C-n at the module-level, Vim displays a completion popup with a few module-level constants from other modules in my project. But it's only constants (symbols capital letters) and the completion still doesn't work anywhere else.
Update 3: I've found that C-x C-o at the top of the file starts some kind of omnicompletion, and completion for pprint.
brings up the menu and quick-reference of everything in the pprint
module. However, none of my own module's imports are being completed.
Update 4, one year later: I gave up and learned Emacs. I have been to the dark side, the mystical land of intrigue and spice, and I say to thee that I have found The Way.
Update 5, two years later: I went back to Vim. Emacs is beautiful, but even after 1.5 years of Emacs, I'm still faster at getting work done in Vim. I've stopped writing Python for now, however, and can't test how well these suggestions work.
Have you tried using
<C_x><C-]>
?What module contains the symbol you are trying to complete? Is it in the python stdlib? Or is it a third-party module?
Make sure that the module/package is in the PYTHONPATH.
In Vim, do:
To add the module's directory:
c-x c-n
works to get the list of members of an object.I used supertab (http://www.vim.org/scripts/script.php?script_id=1643)
Since C-x C-o is a bit frustrating to use
in .vimrc:
then just use Tabb for omnicompletion
If you are using python2, make sure you
and use vim.nox-py2 instead of vim.
I had a similar problem with omni completion not working. In my case it turned out that the minibufexpl.vim plugin was interfering with omni completion. Here is how I found out:
Normal keyword completion works. Omni complete does not work for any language, not just Python. omnifunc is set correctly. After I C-X C-O, nothing happens. I do ":py print globals()" and it is clear that the pythoncomplete was not loaded. I can ":call pythoncomplete#Complete(1, '')" and see it get loaded. To me this rules out it being a Vim issue. It seems something is interfering with keymapping or otherwise intercept the omni completion request. So I start to disable my plugins one by one. It turns out the culprit in my case is "minibufexpl". I have the Holgado version from github.
It looks like there are many open issues with MBE according to the issue tracker on github and there hasn't been any progress since early 2012. I am just going to disable it for now so I can use auto completion. Meanwhile I will just add the following to my vimrc to keep multiple modified buffers open at the same time and use a simple key sequence to cycle through them (MBE more intelligently select the buffers to cycle through but seems too heavy-handed for a simple problem):