Code


Version 13 (modified by Lllama, 8 years ago) (diff)

Updated snippetsemu examples for latest versions of django and the plugin

Using Vim with Django

This page is intended to be used as a collection of hints for using the Vim editor with Django.

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

Tab Setting Reference for Python and Vim

SnippetsEmu

The SnippetsEmu plugin for Vim 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/ftplugin/python.vim file (create it if you don't have it) will allow you to define abbreviations just for models:

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:

Iabbr addmodel class <>(models.Model):<CR><><CR><CR>def __str__(self):<CR>return "%s" % (<>,)<CR><CR>class Admin:<CR>pass<CR><CR>
Iabbr mcf models.CharField(maxlength=<>)<CR><>
Iabbr mff models.FileField(upload_to=<>)<CR><>
Iabbr mfpf models.FilePathField(path=<>, match="<>", recursive=<False>)<CR><>
Iabbr mfloat models.FloatField(max_digits=<>, decimal_places=<>)<CR><>
Iabbr mfk models.ForeignKey(<>, edit_inline=<False>)<CR><>
Iabbr m2m models.ManyToManyField(<>)<CR><>
Iabbr o2o models.OneToOneField(<>)<CR><>

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@ %}<CR>{{ @entry@.@@ }}<CR>@@{% endfor %}<CR>@@

XML.vim

The 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 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 <args>
HiLink djangotagmarkers PreProc
HiLink djangovariablemarkers PreProc
delcommand HiLink

Project.vim

The 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.

Attachments (5)

Download all attachments as: .zip