IntelliJ无法格式化HTML

37

多年来一直使用IntelliJ,一直很满意,希望这只是个例外。 当我按下Ctrl-Alt-L时,IntelliJ没有格式化HTML代码。虽然弹出了对话框,并且假装要进行格式化,但实际上没有移动任何代码。我将文件的扩展名从 HTML 改为 XML,格式化效果正常。实际上我最初在Freemarker模板中发现这个问题,但是后来尝试了纯HTML,得到了相同的结果。 我的版本是13.0.2。

5个回答

31

我遇到了相同的问题,<body> 标签下的语句默认情况下没有缩进。在我更改以下内容后,重新格式化和自动缩进就可以工作:

设置 -> 编辑器 -> 代码样式 -> HTML -> 其他(选项卡) -> 不缩进子元素:-> 从列表中删除“body”。

也许你也会遇到类似的问题。希望它对你有用。


确实是WebStorm 2022.2.4的问题。 - Marcelo Scofano Diniz

5

设置 > 编辑器 > 代码风格 > HTML。
检查您的“制表符和缩进”,但最重要的是“其他”。

例如,默认的“插入新行之前”的值为“body,div,p,form,h1,h2,h3”

当我将我的代码风格导出为 .xml 文件时(设置 > 编辑器 > 代码风格 > Html > 管理按钮),我得到一个名为 default.xml 的文件,其内容如下:

<code_scheme name="Default" />

你可以尝试创建一个名为"default.xml"的文件,并使用"import scheme"。由于它是空的,这表明所有设置都是IntelliJ默认值(据我所知)。
此外,请确保你的扩展名为.html,因为这是IntelliJ用来检测语言的。请确保格式化整个文件(以防它正在格式化一个空选择,或者可能在没有VCS更改文本时尝试格式化VCS更改文本)。
你还可以尝试检查设置>编辑器>文件类型>Html: 此列表应包含所有使用HTML语法检查和格式化的扩展名。(也可以参考如何在 Intellij IDEA 中打开文件并查看 HTML 高亮显示?
我使用的是IntelliJ 2016.1,但这部分与IntelliJ 13没有任何区别。

2
请注意,无效的HTML将不会被重新格式化。因此,如果您的糟糕的HTML也是无效的,那么您可以随意重新格式化,但无效的行将不会改变。
有时这可能会让人感到困惑,但一旦您知道了它,它就成为了好的眼球吸引者,暗示着无效的代码。
常见的例子是误用块级元素:
<span>
    <span>1</span>
    <span>1</span>
</span>

@skwisgaar 你没看到吗?在浏览器的眼中,第一行打开的span标签在第二行被关闭了。也就是说<span><span>1</span>... - Romeo Sierra
@RomeoSierra,我只看到嵌套的span元素,这是可以的(https://webmasters.stackexchange.com/questions/118042/is-using-nested-spans-in-html-5-valid)。如果你所说的是真的,那么整个互联网都会因为嵌套的`div`而停止工作 :) - skwisgaar
这就是我说“在浏览器看来”的原因。相比之下,div是一个块级元素,而span不是。可以在span中嵌套span - Romeo Sierra
我认为IntelliJ格式化程序认为外部span应该是内联的,而不应包含其他块元素。我猜你是对的,理论上规范允许这样做,但这并不意味着你应该这样做。 - Alex

1
你也可以检查是否使用了任何代码风格插件,并尝试关闭它们 - 看起来它们优先于其他设置并可能导致意外结果。至少对我来说,这是解决方案。
在“设置/首选项”对话框(Ctrl+Alt+S)中,单击“插件”。

0

好的,最好的选择似乎是某个重新格式化选项出了问题。我目前正在使用WebStorm,它大致上有相同的设置UI界面。

在"Preferences(首选项)" -> "Editor(编辑器)" -> "Formatting(格式化)" -> “Show 'Reformat Code' Dialog(显示“重新格式化代码”对话框)”,勾选该选项,然后在代码重新格式化时会弹出一个对话框,在那里您可以修订您的重新格式化选项,以确保没有任何选项出现问题。


1
我使用Intellij 13,重构对话框确实弹出。但是它没有重要的选项。 - ipolevoy
现在有一个可能性已经排除了,在“首选项”中应该有“代码样式” - 这是代码格式化程序在格式化代码时所参考的内容,我建议找到你的HTML代码样式并检查是否正确填写,或者是否存在。此外,IntelliJ是一个JAVA IDE,所以出现问题也不奇怪。 - Raptus
@Raptus IntelliJ是该公司的旗舰产品,它将PHPStorm和其他IDE的所有功能结合到一个程序中。我不知道为什么他们将其宣传为Java IDE。 - Dan Nissenbaum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接