tags:

views:

3673

answers:

3

Does anyone know how to set up auto completion to work nicely with python, django, and vim?

I've been trying to use pysmell, but I can't seem to get it set up correctly (or maybe I don't know how it works). Right now, I run pysmell in the django directory (I'm using the trunk) and move the resulting tags to my project directory, then I also run pysmell in the project directory. Vim doesn't pick up the django tags, though, and they don't get auto completed.

Does anyone know how to set up auto completion in vim so that it will complete the long django functions (like get_object_or_404) as well as classes/functions in my own code? I have poked around on google but haven't found any good resources.

Thanks.

+3  A: 
+11  A: 

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

  1. Install PySmell using the setup.py install command.
  2. Generate the PYSMELLTAGS file for django by going to your site-packages/django directory and running: pysmell . -o ~/PYSMELLTAGS.django
  3. Copy that file to your project directory, and then ran pysmell . to generate the project PYSMELLTAGS file
  4. Make sure pysmell is in your PYTHONPATH (export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/)
  5. Run vim (vim .)
  6. Source pysmell.vim (:source /path/to/pysmell/pysmell.vim)
  7. Set the autocomplete command (:set omnifunc=pysmell#Complete)
  8. 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
bchang
I pretty much did this, and can't seem to get it to work. The only difference is that pysmell.vim is in my ~/.vim/plugins directory, so I don't need to source it in the vimrc. However, it looks like auto-completion still is not working.To test it, I open a python file like test.py and do something like "from django.shortcuts import get_object_or_404", and then on the next line I type "get_" and ^x^o, and it says that it can't find anything to auto-complete. Am I using it wrong?
Nate
Not sure if it's a typo or not, but in case it's not, I believe the plugin directory is .vim/plugin NOT .vim/pluginS. Double-check that and it might take care of your problems.
bchang
Yeah, that was a typo on my part when I entered it here: pysmell.vim is getting sourced and it's still not working :(. Do you have to press anything (like F2) to update the tags in pysmell after you've imported something? I didn't think you had to, and I obviously tried F2 to no avail.
Nate
+6  A: 
Lakshman Prasad