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

Ace Editor Beautify扩展未按预期对HTML代码换行的问题求助

解决Ace Editor Beautify无法换行格式化HTML的问题

Hey Jon, 我看了你遇到的问题——用Ace Editor搭配Beautify扩展处理<div><ul><li>aaaaa</li></ul></div>时,没法得到带换行和空格的格式化结果,代码还是挤在一行。这事儿我之前也碰到过,大概率是两个原因:要么编辑器没正确识别HTML语言模式,要么Beautify的默认配置没开启换行相关的规则。

下面给你具体的解决步骤,亲测有效:

1. 先给Ace Editor指定HTML语言模式

Beautify需要知道当前编辑的是HTML文件,才能调用对应的格式化逻辑。你得在初始化编辑器时加上这行:

const editor = ace.edit("editor");
editor.session.setMode("ace/mode/html"); // 这步很关键,别漏了!

2. 自定义Beautify的HTML格式化配置

Beautify的默认HTML设置比较保守,不会强制给嵌套标签换行。你可以手动配置参数,让它按照你的需求格式化:

// 先获取Beautify扩展
const beautify = ace.require("ace/ext/beautify");

// 自定义格式化规则
const formatOptions = {
  html: {
    indent_size: 2,          // 缩进用2个空格
    indent_char: " ",        // 缩进字符选空格(也可以用\t)
    wrap_line_length: 0,     // 设置为0表示不限制行长度,强制给嵌套标签换行
    indent_inner_html: true, // 给内部标签加缩进
    preserve_newlines: true, // 保留原有换行(这里本来就是单行,影响不大)
    end_with_newline: true   // 格式化后结尾加个换行
  }
};

// 调用格式化
beautify.beautify(editor.session, formatOptions);

3. 确保在正确的时机调用格式化

比如你可以绑个按钮点击事件,触发格式化:

document.getElementById("beautifyBtn").addEventListener("click", () => {
  const beautify = ace.require("ace/ext/beautify");
  const formatOptions = {
    html: {
      indent_size: 2,
      wrap_line_length: 0,
      indent_inner_html: true
    }
  };
  beautify.beautify(editor.session, formatOptions);
});

这样配置后,你的目标HTML代码会被格式化成这种标准的缩进格式:

<div>
  <ul>
    <li>aaaaa</li>
  </ul>
</div>

(注:和你预期的<div> <ul> <li>aaaaa</li> </ul> </div>略有不同,这种缩进换行是更通用的HTML格式化规范,可读性更强;如果一定要每个标签后加空格再换行,可以把wrap_line_length设为1,不过这种格式其实很少用哦)

最后再确认下,你已经正确引入了Beautify的脚本文件,比如:

<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.13/ext-beautify.js"></script>

内容的提问来源于stack exchange,提问作者Jon Ryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:29:21