使用HTML Tidy来缩进HTML代码?

cwd*_*cwd 32 html htmltidy

是否可以使用HTML Tidy来缩进HTML代码?

示例代码

<form action="?" method="get" accept-charset="utf-8">

<ul>
<li>
<label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q" />
</li>
<li><input class="submit" type="submit" value="Search" /></li>
</ul>


</form>
Run Code Online (Sandbox Code Playgroud)

期望的结果

<form action="?" method="get" accept-charset="utf-8">
    <ul>
        <li>
        <label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q"/>
        </li>
        <li><input class="submit" type="submit" value="Search"/></li>
    </ul>
</form>
Run Code Online (Sandbox Code Playgroud)

如果我使用标准命令运行它,tidy -f errs.txt -m index.html那么我得到它

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 15.3.6), see www.w3.org">
<title></title>
</head>
<body>
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li><label class="screenReader" for=
"q">Keywords</label><input type="text" name="q" value="" id=
"q"></li>
<li><input class="submit" type="submit" value="Search"></li>
</ul>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我怎么能省略所有额外的东西,实际上让它缩进代码?

请原谅我,如果这不是它应该支持的功能,我在寻找什么库/工具?

Pau*_*tte 22

使用配置文件只用indent,tidy-markquiet选项:

indent: auto
indent-spaces: 2
quiet: yes
tidy-mark: no
Run Code Online (Sandbox Code Playgroud)

tidy_config.txt将其命名并将其保存为与.html文件相同的目录.像这样运行:

tidy -config tidy_config.txt index.html
Run Code Online (Sandbox Code Playgroud)

要进行更多自定义,请使用整洁的手册页查找其他相关选项,例如markup: noforce-output: yes.

  • 这不回答这个问题.它仍在添加元生成器标记.有没有办法关闭除缩进以外的所有*更改? (7认同)
  • 如果你是没有中间文件的oneliner的粉丝,你可以写成`tidy -xml --indent auto --indent-spaces 2 --quiet yes index.html`. (5认同)
  • `tidy-mark:no`应该关闭元生成器标签, (2认同)
  • 省略“input-xml: yes”(“-xml”),因为它会将“&lt;input&gt;”标记为错误。 (2认同)

kob*_*ame 19

我没有发现"只有驯服 - 没有任何改变"的可能性.下一个配置文件将"修复"尽可能低,并且(大部分)只重新缩进html.Tidy仍然纠正一些错误的条件,如重复(重复)属性.

#based on http://tidy.sourceforge.net/docs/quickref.html
#HTML, XHTML, XML Options Reference
anchor-as-name: no  #?
doctype: omit
drop-empty-paras: no
fix-backslash: no
fix-bad-comments: no
fix-uri:no
hide-endtags: yes   #?
#input-xml: yes     #?
join-styles: no
literal-attributes: yes
lower-literals: no
merge-divs: no
merge-spans: no
output-html: yes
preserve-entities: yes
quote-ampersand: no
quote-nbsp: no
show-body-only: auto

#Diagnostics Options Reference
show-errors: 0
show-warnings: 0

#Pretty Print Options Reference
break-before-br: yes
indent: yes
indent-attributes: no   #default
indent-spaces: 4
tab-size: 4
wrap: 132
wrap-asp: no
wrap-jste: no
wrap-php: no
wrap-sections: no

#Character Encoding Options Reference
char-encoding: utf8

#Miscellaneous Options Reference
force-output: yes
quiet: yes
tidy-mark: no
Run Code Online (Sandbox Code Playgroud)

例如下一个html片段

<div>
<div>
<p>
not closed para
<h1>
h1 head
</h1>
<ul>
<li>not closed li
<li>closed li</li>
</ul>
some text
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

将改为

<div>
    <div>
        <p>
            not closed para
        <h1>
            h1 head
        </h1>
        <ul>
            <li>not closed li
            <li>closed li
            </ul>some text
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

您可以注意到,hide-endtags: yes隐藏</li>了输入中第二个项目符号的结束.设置hide-endtags: no- 将获得下一个:

<div>
    <div>
        <p>
            not closed para
        </p>
        <h1>
            h1 head
        </h1>
        <ul>
            <li>not closed li
            </li>
            <li>closed li
            </li>
        </ul>some text
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

所以,tidy增加关闭</p>和关闭</li>第一个子弹.

我没有发现保留输入的所有内容的可能性,只重新加入文件.


Tom*_*dor 12

您需要以下选项:

tidy --show-body-only yes -i 4 -w 80 -m file.html
Run Code Online (Sandbox Code Playgroud)

http://tidy.sourceforge.net/docs/quickref.html#show-body-only

-i 4 - 缩进4个空格(整齐从不使用制表符)

-w 80 - 在第80列包装(默认在我的系统上:68,非常窄)

-m - 在原地修改文件

(您可能想省略最后一个选项,并先检查输出)

只显示身体,自然会遗漏tidy-mark(发电机meta).

另一个很酷的选择是: --quiet yes- 不打印W3C广告和其他不必要的输出(仍然报告错误)

  • Tidy 确实使用制表符,只需在命令行参数中添加“--indent-with-tabs yes”即可。 (2认同)

thd*_*oan 6

为了回答海报的原始问题,使用 Tidy缩进HTML 代码,这是我使用的:

tidy --indent auto --quiet yes --show-body-only auto --show-errors 0 --wrap 0 input.html

输入.html

<form action="?" method="get" accept-charset="utf-8">

<ul>
<li>
<label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q" />
</li>
<li><input class="submit" type="submit" value="Search" /></li>
</ul>


</form>
Run Code Online (Sandbox Code Playgroud)

输出:

<form action="?" method="get" accept-charset="utf-8">
  <ul>
    <li><label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q"></li>
    <li><input class="submit" type="submit" value="Search"></li>
  </ul>
</form>
Run Code Online (Sandbox Code Playgroud)

没有添加额外的 HTML 代码。错误被抑制。要了解每个选项的作用,最好参考官方参考