= Using Vim with Django = This page is intended to be used as a collection of hints for using the Vim editor with Django. * Tips: * Vim Modeline * Plugins: * snippetsEmu * xml.vim * Project * Vim/IDE: * PIDA == Tips == === Vim Modeline === To insure that all developers are using a standard tab format (as long as they are using Vim), you can add a Vim modeline (special comment) to your files, to set people in the same mode for that file. Example: {{{ # vim: ai ts=4 sts=4 et sw=4 }}} [http://py.vaults.ca/~x/python_and_vim.html Tab Setting Reference for Python and Vim] == Plugins == === snippetsEmu === Development takes place on [http://code.google.com/p/snippetsemu Google Code], where the subversion repository includes predefined snippets for django/python/etc. [http://www.vim.org/scripts/script.php?script_id=1318 SnippetsEmu] allows one to define abbreviations which can be expanded into larger blocks of text. The abbreviations can also contain place markers which can be 'jumped to' in a similar manner to the macros defined in TextMate on OS X. One can add specific abbreviations for models or templates based on file contents. Adding the following line to your ~/.vim/after/ftplugin/python.vim file (create it if you don't have it) will allow you to define abbreviations just for models (use the file \Program Files\vim\vimfiles\after\ftplugin\python.vim under Windows): {{{ if getline(1) =~ 'from django.db import models' "Your abbreviations here endif }}} The following is a collection of Django specific abbreviations for use with the plugin (using the default start and end tags: '<{' and '}>'): Models: {{{ Snip addmodel class <{}>(models.Model):<>def __str__(self):return "%s" % (<{}>,)class Admin:pass Snip mcf models.CharField(maxlength=<{}>)<{}> Snip mff models.FileField(upload_to=<{}>)<{}> Snip mfpf models.FilePathField(path=<{}>, match="<{}>", recursive=)<{}> Snip mfloat models.FloatField(max_digits=<{}>, decimal_places=<{}>)<{}> Snip mfk models.ForeignKey(<{}>, edit_inline=)<{}> Snip m2m models.ManyToManyField(<{}>)<{}> Snip o2o models.OneToOneField(<{}>)<{}> }}} Templates: Templates should be used with different tag delimiters as they will no doubt contain (X)HTML which will confuse the plugin. Assuming start and end tags are '@': {{{ Iabbr fore {% for @entry@ in @list@ %}{{ @entry@.@@ }}@@{% endfor %}@@ }}} === XML.vim === The [http://www.vim.org/scripts/script.php?script_id=301 xml.vim] plugin is really useful for editing XML and HTML files. It makes tag completion easy and allows you to bounce between start and end tags. === Syntax for templates === Dave Hodder has contributed standard [http://www.vim.org/scripts/script.php?script_id=1487 Vim syntax files]. If you are interested in rolling your own, this is a simple addition to let Vim deal with Django template syntax: Create the file: {{{$VIM/vimfiles/after/syntax/html.vim}}} with the following content: {{{ syn region djangotagmarkers start="{{" end="}}" syn region djangovariablemarkers start="{%" end="%}" command! -nargs=+ HiLink hi def link HiLink djangotagmarkers PreProc HiLink djangovariablemarkers PreProc delcommand HiLink }}} === Project.vim === The [http://www.vim.org/scripts/script.php?script_id=69 Project] plugin adds IDE file organisation functionality to Vim. Something like the following could be used to view a project's files. {{{ Django Project=/path/to/project CD=. filter="*.py" { __init__.py settings.py urls.py apps=apps { __init__.py app1=app1Dir { __init__.py views.py models=app1ModelsDir { __init__.py app1models.py } } app2=app2Dir { __init__.py views.py models=app2modelsDir { __init__.py app2Dir.py } } media=mediaDir { images=imagesDir { } } } }}} Such a structure can also be created by using the build in '\C' command which will recurse through the whole directory tree. == Vim/IDE == === PIDA === Although this is not Django-specific (I don't think some of the other stuff in here is very Django-specific either), [http://pida.berlios.de PIDA] looks like a pretty nice IDE environment for VIM+Python, which would therefore help you out in Django :).