I’ve finally weaned myself off Komodo, since the vim bindings had just enough tiny errors to annoy me, and I was never satisfied with how long it took to find and open a file inside the project.

The one thing I was really missing in vim, though, was solid code-completion feature. After much haranguing, I finally figured out how to enable omnicomplete with django.

Download and install vim for OS X

By far the easiest way to get a version of vim that has python compiled is through macports . sudo port install vim +python

. Now replace your old version of vim in your default path (useful for when a shell command calls vim as the editor) sudo cp /usr/bin/vim /usr/bin/vim7.0 sudo cp /opt/local/bin/vim /usr/bin/vim

Verify that you have python compiled by typing :python print "Hello" while in vim

Enable omnicompletion

I’ve enabled omnicomplete for a bunch of different different completers. Add these lines to your .vimrc : autocmd FileType python set omnifunc=pythoncomplete#Complete autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS autocmd FileType html set omnifunc=htmlcomplete#CompleteTags autocmd FileType css set omnifunc=csscomplete#CompleteCSS

Run vim so that you can actually complete django files

Omnicomplete imports the modules behind the scenes to help you with completion. Problem is, it won’t be able to import django.db since you don’t have a settings module specified… so any module that imports models won’t work. Not very useful. DJANGO_SETTINGS_FILE=myapp.settings vim

Verify that imports will work by typing :python from django import db

Now you can just press <C-X><C-O> to omnicomplete!

I also highly recommend the rope plugin for vim. It simplifies opening files within your project, and even will organize your imports! for you!