用于Django模板的Vim内部标记块

时间:2012-05-07 13:45:16

标签: django templates vim django-templates

是否存在为Django模板提供这些文本对象的插件?例如,如果我有以下文本,则在HTML / XML中

<p>This is some text.<p>

我的光标位于标签内的任何位置,我可以使用cit更改标签内的文字。我正在为Django模板寻找类似的东西。例如,使用文本

{% block title %}This is the title{% endblock %}

我想要同样的行为。如果什么都不存在,那么任何vimscripters都知道这是否可能并愿意提供一些提示?

谢谢!

3 个答案:

答案 0 :(得分:2)

查看Django官方文档。 有一个“使用带Django的Vim”部分。

https://code.djangoproject.com/wiki/UsingVimWithDjango

环绕映射部分。


以下是摘录:

let b:surround_{char2nr("v")} = "{{ \r }}"
let b:surround_{char2nr("{")} = "{{ \r }}"
let b:surround_{char2nr("%")} = "{% \r %}"
let b:surround_{char2nr("b")} = "{% block \1block name: \1 %}\r{% endblock \1\1 %}"
let b:surround_{char2nr("i")} = "{% if \1condition: \1 %}\r{% endif %}"
let b:surround_{char2nr("w")} = "{% with \1with: \1 %}\r{% endwith %}"
let b:surround_{char2nr("f")} = "{% for \1for loop: \1 %}\r{% endfor %}"
let b:surround_{char2nr("c")} = "{% comment %}\r{% endcomment %}"

将上述内容放在〜/ .vim / ftplugin / htmldjango.vim中。

可视模式中的示例(首先选择一些文本):

  • 输入 Sv S {表示变量
  • 为块键入 Sb
  • 为if语句输入 Si
  • 输入带有声明的 Sw
  • 输入 Sc 以发表评论
  • 输入for语句 Sf
  • 为其他模板标记输入 S%

PS:另一种可能性是使用eclim(vim + eclipse)支持Django项目和模板编辑http://eclim.org/vim/python/django.html,但这个更重。

答案 1 :(得分:1)

django-template-textobjects插件(https://github.com/mjbrownie/django-template-textobjects)允许您实现此目的。它添加了一系列文本对象(例如,用于Django块的db,用于Django for循环的df等)。

例如,cidb允许您更改以下内容:

{% block stylesheets %}My stylesheets here{% endblock %}

该插件依赖于另一个插件vim-textobj-user(https://github.com/kana/vim-textobj-user),所以请记住先安装它。

答案 2 :(得分:0)

您可能需要为此编写自己的文本对象。有关如何完成此操作的示例,请参阅textobj-rubyblockvim-indent-object