You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IntelliJ中正确格式化缩进Magnolia CMS的FreeMarker(.ftl)文件

解决Magnolia CMS中FreeMarker(.ftl)文件缩进混乱的问题

在Magnolia CMS开发FreeMarker模板时,常会遇到代码缩进杂乱的情况,哪怕用IntelliJ自带的「重新格式化代码」「自动缩进行」功能,输出效果也不尽如人意——比如原代码层级混乱,格式化后还是达不到预期的规整结构。

以下是几个实用的解决办法:

1. 校准IntelliJ的FreeMarker格式化配置

打开IntelliJ的设置(File > Settings),依次进入Languages & Frameworks > Template Languages > FreeMarker,再切换到Code Style > FreeMarker标签页:

  • 把「Indent」的数值设为2(和你期望的缩进一致)
  • 勾选「Indent children of root elements」,确保根元素的子节点能正确缩进
  • 检查「Keep line breaks in FTL directives」等相关选项,保证#if这类FTL指令的缩进逻辑被正确识别

另外还要同步HTML的格式化规则:进入Settings > Editor > Code Style > HTML,把缩进大小也设为2,避免两种语言的格式化规则冲突。

2. 手动调整FTL指令的格式

对于内嵌在HTML属性里的FTL代码(比如<div class="[#if condition]class1[/#if]">),IntelliJ可能无法完美识别,这部分可以保留现有写法,重点调整HTML标签的层级缩进。

对于块级FTL指令(比如[#if someCondition]...[/#if]),要保证指令本身和内部HTML标签的缩进匹配层级:比如把指令开头和父容器同缩进,内部的<span>再缩进一级,就像你期望的示例那样。

3. 借助第三方插件增强格式化能力

安装IntelliJ官方的「FreeMarker Support」插件,它能强化IDE对FTL文件的语法识别和格式化支持。安装完成后重启IDE,再用快捷键Ctrl+Alt+L重新格式化代码,效果会更理想。

调整后的正确格式化代码示例:

<div class="[#if condition]class1[/#if]" id="my-id" [#if condition]data-test="true"[/#if]>
  <div>
    <div>
      <section class="">
        <div>
          <div>
            <div>
              [#if someCondition]
                <span>Lorem Ipsum</span>
              [/#if]
            </div>
            <div>
              <span>Lorem Ipsum</span>
            </div>
          </div>
        </div>
      </section>
      <div id="container">
      </div>
    </div>
  </div>
</div>
<script defer src="/something/source.js"></script>

内容的提问来源于stack exchange,提问作者Davide Buoso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:25:08