django-plus.vim icon indicating copy to clipboard operation
django-plus.vim copied to clipboard

:guitar: Improvements to the handling of Django related files in Vim

django-plus.vim


Improvements to the handling of Django related files in Vim, some of which are based on Steve Losh's htmldjango scripts.

Why?

Django support in Vim sucks.

What Sucks? Sucks?
Hard-coded htmldjango filetype for any .html file Yes
HTML indentation Yes
QuerySet completions Yes
settings.py variable completions Yes
Template tag and filter completions Yes
Template file completion for {% include %} and {% extends %} Yes
Template file completion for rendering functions Yes

To help you understand the difference this plugin makes, I used science:

science

As you can see, one line goes up. However, the other line doesn't go up that much. It doesn't get any clearer than that.

Improvements

A summary of improvements to Django development in Vim.

General

  • Django is detected by searching parent directories for clues that indicate the current file is within a Django project.
  • b:is_django is set in any file that's within a Django project. This could be useful for your personal scripts.
  • b:is_django_settings is set if the file is settings.py or if the file is in the same directory as settings.py. (b:is_django will still be set)
  • Optionally append .django to the filetype for files found within a Django project.
  • If a Django project's manage.py script is found, completions will include your settings and templatetags found in INSTALLED_APPS.
  • g:django_filetypes takes a list of glob patterns to append the django filetype to matching files. e.g. *.xml will have the filetype xml.django if the file is found in a Django project.

Python

  • Completions for Django settings when b:is_django_settings is present.
  • Completions for settings. when b:is_django is present in a .py file.
  • Completions for template files when using render(), get_template(), render_to_string(), render_to_response(), or template_name =.
  • QuerySets could be lurking anywhere. That's why QuerySet completions will be included for basically anything after a period.
  • If you are using Ultisnips, Django snippets are enabled and UltiSnips#FileTypeChanged() is called to ensure that :UltiSnipsEdit opens django.snippets by default instead of python.snippets.

HTML

  • The filetype is set to htmldjango when editing HTML files.
  • Basic completions for template tags and filters.
  • Completions for template files when using {% extends %} or {% include %}.
  • Django tags are indented correctly, including custom tags.
  • matchit configuration for Django tags, including custom tags. Additionally, the cursor is placed at the beginning of the tag name.
  • Tag and variable blocks are highlighted within script tags, style tags, and HTML attributes.
  • If you are using Ultisnips, HTML snippets are enabled and UltiSnips#FileTypeChanged() is called to ensure that :UltiSnipsEdit opens htmldjango.snippets by default instead of html.snippets.