【问题标题】:=G to format xml/html=G 格式化 xml/html
【发布时间】:2020-09-02 21:42:56
【问题描述】:

我通常通过以下方式格式化 xml 或 html:

  • =G

但是,如果文件只缩小到一行,这将不起作用,这在 xml 中很常见。有没有办法在vim中轻松格式化单行html或html(即没有插件)?

此外,vim 中的块格式化非常粗糙(“格式化”可能是一个雄心勃勃的词,因为它似乎更像是一个“缩进器”),例如:

  <footer>
    <div class="container"><div class="row"><div class="col-md-12">
      <small id="copyright">&copy; 2016 MySite
      </small>
    </div></div></div>
  </footer>

vim中得到如下格式:

  <footer>
      <div class="container"><div class="row"><div class="col-md-12">
                  <small id="copyright">&copy; 2016 MySite
                  </small>
              </div></div></div>
  </footer>

这是它在 TextMate 中的作用:

    <footer>
        <div class="container">
            <div class="row">
                <div class="col-md-12">
                    <small id="copyright">© 2016 MySite</small>
                </div>
            </div>
        </div>
    </footer>

【问题讨论】:

  • gqq 票价如何?

标签: html xml vim


【解决方案1】:

据我所知,在缩进时没有内置的 vim 功能来分割行。所以你必须在缩进之前这样做。

As noticed here你可以使用外部工具tidy。它为您缩进和拆分(对 HTML 使用“-html”)。

:!tidy -mi -xml -wrap 0 %

您也可以手动重新格式化它。全部加入一行,用 subst 和 indent 分割。

ggVGgJ
:%s/>\s*</>\r</g
gg=G

【讨论】:

  • 使用外部整洁是一个很好的建议。不幸的是,您的答案只有外部链接。如果您能总结一下如何将 tidy 实现为外部工具,并举例说明它会对问题中的示例 HTML sn-p 做什么,那就太好了。
  • 虽然使用正则表达式解析 HTML 确实是一种不好的做法,但在文本编辑器中使用正则表达式来帮助格式化通常是一种常见的做法。部分原因是它们主要用于启发式方法并帮助确定什么是好的缩进......此外,使用工具来帮助编辑 HTML 的目的是生成健全且可读的 HTML,在这种情况下使用正则表达式将起作用相当好,因为您希望您生成可读、结构良好的 HTML。第三,正则表达式通常不是 only 匹配标签和组件的机制,通常你会得到其他 Vim 特性的帮助。
  • 简而言之,我会从答案中删除“纯粹的邪恶”参考。我觉得太自以为是了。我不认为这真的有助于说明问题。如果你真的这么认为,那就别提使用正则表达式了……
  • filbranden,感谢您的建议!编辑答案。我同意,在这种情况下,正则表达式可以安全使用。
猜你喜欢
  • 2012-07-24
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多