Vim, Python, and Django autocompletion (pysmell?)
(source: dispatched.ch)
You can set up VIM with buffers, buffer display, auto complete, even Py Doc display.
Here you go
As I wrote in other places, I developed Jedi. I really think it is far better than all the existing solutions (even PyCharm).
https://github.com/davidhalter/jedi-vim
It is built upon pythoncomplete and much much more powerful!
It works for complex code:
And has additional features:
There is a list of all possible features:
- builtin functions/classes support
- complex module / function / class structures
- ignores syntax and indentation errors
- multiple returns / yields
- tuple assignments / array indexing / dictionary indexing
- exceptions / with-statement
- *args / **kwargs
- decorators
- descriptors -> property / staticmethod / classmethod
- closures
- generators (yield statement) / iterators
- support for some magic methods:
__call__
,__iter__
,__next__
,__get__
,__getitem__
,__init__
- support for list.append, set.add, list.extend, etc.
- (nested) list comprehensions / ternary expressions
- relative imports
getattr()
/__getattr__
/__getattribute__
- function annotations (py3k feature, are ignored right now, but being parsed. I don't know what to do with them.)
- class decorators (py3k feature, are being ignored too, until I find a use case, that doesn't work with Jedi)
- simple/usual
sys.path
modifications isinstance
checks for if/while/assert
First off, thank you for asking this question, as it forced me to figure this out myself and it's great!
Here is the page I used as a reference: PySmell v0.6 released : orestis.gr
- Install PySmell using the
setup.py install
command. - Generate the
PYSMELLTAGS
file for django by going to yoursite-packages/django
directory and running:pysmell . -o ~/PYSMELLTAGS.django
- Copy that file to your project directory, and then ran
pysmell .
to generate the project PYSMELLTAGS file - Make sure pysmell is in your
PYTHONPATH
(export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/
) - Run vim (
vim .
) - Source
pysmell.vim
(:source /path/to/pysmell/pysmell.vim
) - Set the autocomplete command (
:set omnifunc=pysmell#Complete
) - Type ^x^o to autocomplete and it should work
I realize this is not a sustainable solution, but you should be able to use this as a start to getting it setup to always work (e.g., add the export to your .bashrc, add the :source to your .vimrc, setup autocmd FileType python set omnifunc=pysmell#Complete
, etc.)
Let me know if this is enough to get you started. It worked for me!
Edit
I simply added this to my .vimrc and as long as the PYSMELLTAGS
& PYSMELLTAGS.django
files are in my project root, it works fine without any other work:
python << EOF
import os
import sys
import vim
sys.path.append("/usr/local/python/lib/python2.5/site-packages")
EOF
exe ":source ~/src/pysmell/pysmell.vim"
autocmd FileType python set omnifunc=pysmell#Complete
I've had good luck with exuberant-ctags for this.
I use this macro in my vimrc:
execute 'map :!/usr/bin/exuberant-ctags -f '.&tags.' --recurse '.$_P4ROOT.' '
You'll want to modify that slightly, so that it includes your python /site-packages/django/ directory as well as your own code.
Then, hit F2 inside vim to update the tags, and use the regular vim tag bindings to navigate.