30👍
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
13👍
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
- [Django]-How to combine django "prefetch_related" and "values" methods?
- [Django]-Example of Django Class-Based DeleteView
- [Django]-TypeError: login() takes 1 positional argument but 2 were given
12👍
(source: dispatched.ch)
You can set up VIM with buffers, buffer display, auto complete, even Py Doc display.
- [Django]-How to add the current query string to an URL in a Django template?
- [Django]-Find object in list that has attribute equal to some value (that meets any condition)
- [Django]-Models.py getting huge, what is the best way to break it up?
3👍
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.
- [Django]-Redirect / return to same (previous) page in Django?
- [Django]-Django F expressions joined field
- [Django]-Case insensitive unique model fields in Django?
2👍
Today, you not need special extentions for django autocomplete in vim. Make sure that you have vim with python support.
To check it, type in xterm:
vim –version|grep python
output:
+python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +signs … …
To make work autocomplete, add this lines in your .vimrc:
autocmd FileType python set omnifunc=pythoncomplete#Complete
if has(“python”)
python import sys,os
python sys.path.append(‘/home/sergey/workspace/django’)
python os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘djangoProject.settings’
endif
where:
- sys.path.append is path to your django workspace directory
- djangoProject is name of your django project, which is going just after ‘/home/sergey/workspace/django’
Finally, save it and restart vim. Now, after ‘.’, you press default ctrl-x ctrl-o to get your autocomplete.
- [Django]-Choose test database?
- [Django]-Render HTML to PDF in Django site
- [Django]-What is the equivalent of "none" in django templates?