Django 模板的 Vim 内部标签块

Posted

技术标签:

【中文标题】Django 模板的 Vim 内部标签块【英文标题】:Vim inner tag blocks for Django templates 【发布时间】:2012-05-16 00:40:20 【问题描述】:

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

<p>This is some text.<p>

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

% block title %This is the title% endblock %

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

谢谢!

【问题讨论】:

@RandyMorris 感谢您的链接 @RandyMorris 清理旧问题。您可以将其发布为答案吗?这是我最接近解决方案的方法。 完成,感谢您重温旧问题。我们需要更多像你这样的人。 【参考方案1】:

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

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

% block stylesheets %My stylesheets here% endblock %

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

【讨论】:

【参考方案2】:

您可能必须为此编写自己的文本对象。请参阅 textobj-rubyblock 和 vim-indent-object 了解如何完成此操作的示例。

【讨论】:

谢谢兰迪!还没来得及做这个,但如果我这样做了,我会在这里发帖。【参考方案3】:

查看官方 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。

视觉模式下的示例(先选择一些文本):

为变量键入 SvS 输入 Sb 表示一个块 为 if 语句键入 Si 为 with 语句键入 Sw 输入 Sc 发表评论 为 for 语句键入 Sf 为其他模板标签键入 S%

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

【讨论】:

是的。我以前见过这个,但这就是我要问的。不过还是不错的。谢谢:)

以上是关于Django 模板的 Vim 内部标签块的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 模板中的“带有模板标签”中设置 Django 渲染块值?

使用 django-pygmentify 突出显示 Django 模板引擎中的内部代码块

Django模板:在同一基础中使用多个块标签

是否可以使用 django 的自定义模板标签在模板的其他块中插入代码?

django-7.django模板继承(block和extends)

python测试开发django-7.django模板继承(block和extends)