144

如何修复他的巨大 html 文件的缩进,这一切都搞砸了?

我尝试了通常的"gg=G命令,这是我用来修复代码文件缩进的。但是,它似乎不适用于 HTML 文件。它只是删除了所有格式。

我还尝试了设置:filetype = xml,看看是否欺骗它认为这是一个 XML 文件会有所帮助,但它仍然没有这样做。

4

11 回答 11

204

有几件事都需要到位。只是将它们全部汇总在一个位置:

设置以下选项:

:filetype indent on
:set filetype=html           # abbrev -  :set ft=html
:set smartindent             # abbrev -  :set si

然后将光标移动到文件顶部并缩进到末尾:gg =G
或选择要缩进的所需文本并点击=缩进。

于 2013-01-01T22:43:04.587 回答
96

filetype indent onmy.vimrc中,Vim 可以很好地缩进 HTML 文件。

shiftwidtha为 2的简单示例:

<html>
  <body>
    <p>
    text
    </p>
  </body>
</html>
于 2009-05-02T20:34:31.323 回答
73

使用智能缩进的主要问题是,如果 XML(或 HTML)位于一行上,因为它可能最终从 curl 请求中返回,那么gg=G就无法解决问题。相反,我刚刚使用从 VI 直接调用的 tidy 体验了一个很好的缩进:

:!tidy -mi -xml -wrap 0 %

这基本上告诉 VI 调用 tidy 来清理 XML 文件,而不是换行以使其适合默认的 68 个字符宽的行。我处理了一个 29MB 的大型 XML 文件,花了 5 到 6 秒。我猜对于 HTML 文件,命令应该是:

:!tidy -mi -html -wrap 0 %

正如评论中提到的,tidy它是一个基本工具,您可以在许多基础 Linux / MacOS 系统上找到它。这是项目的页面,以防您希望拥有它但没有:HTML Tidy

于 2013-11-13T17:43:21.603 回答
49

正如上面 tylerl 解释的那样,设置以下内容:

:filetype indent on
:set filetype=html
:set smartindent

但是,请注意在 vim 7.4 中 HTML 标签htmlheadbody和其他一些默认情况下缩进。这是有道理的,因为 HTML 文件中的几乎所有内容都属于这些标签。如果你真的想要,你可以让这些标签像这样缩进:

:let g:html_indent_inctags = "html,body,head,tbody" 

有关更多信息,请参阅“ HTML 缩进在编译的 Vim 7.4 中不起作用,有什么想法吗? ”和“替代 html 缩进脚本”。

于 2013-10-13T23:16:01.010 回答
12

这是我的解决方案,可以很好地以间隔良好的方式打开“丑陋”的 HTML:

vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"
  • sw命令是因为我的默认值是 4,这对于 HTML 来说太高了。
  • 下一部分在每个元素 ( ) 之后添加一个换行符(Vim 认为这是一个回车,叹气>)。
  • 然后用 重新缩进整个文件=
  • 然后取消突出>显示(因为我set hlsearch在我的 vimrc 中有)。
  • 然后删除所有空行/仅空白行(有关更多信息,请参阅“ Vim 删除空白行”,这也是双转义的,因为它在 shell 中)。

| wq! fileOut.html如果您根本不想进入 Vim,您甚至可以添加到最后,只需清理文件即可。

于 2013-05-01T18:56:07.667 回答
7

我使用这个脚本: https ://github.com/maksimr/vim-jsbeautify

在上面的链接中,您拥有所有信息:

  1. 安装
  2. 配置(从第一个示例复制)
  3. :call HtmlBeautify()

把工作做得漂亮!

于 2014-04-17T13:16:10.243 回答
6

没有一个答案对我有用,因为我所有的 HTML 都在一行中。

基本上,您首先需要使用以下命令分隔每一行,该命令替换><为相同的字符,但中间有一个换行符。

:%s/></>\r</g

然后命令

gg=G

将缩进文件。

于 2020-08-15T10:58:18.453 回答
4

你试过在 Vim 网站上使用 HTML 缩进脚本吗?

于 2009-05-02T20:44:00.393 回答
4

这是一个重量级的解决方案,可以让您缩进,以及您在编辑时不一定要关心的所有 HTML 漂亮打印。

首先,下载Tidy。确保将二进制文件添加到路径中,以便可以从任何位置调用它。

接下来,创建一个描述您最喜欢的 HTML 风格的配置文件。文档对 Tidy 来说不是很好,但这里有一个概述所有选项的列表。这是我的配置文件:

bare: yes
break-before-br: no
clean: yes
drop-proprietary-attributes: yes
fix-uri: yes
indent-spaces: 4
indent: yes
logical-emphasis: yes
markup: yes
output-xhtml: yes
quiet: yes
quote-marks: yes
replace-color: yes
tab-size: 4
uppercase-tags: no
vertical-space: yes
word-2000: yes
wrap: 0

将其保存tidyrc_html.txt在您的ftplugin文件夹中(在 vimfiles 下)。

另一个文件:将以下行添加到(或创建)html.vim,也在ftplugin

map <leader>tidy :%! tidy -config ~/vimfiles/ftplugin/tidyrc_html.txt <CR>

要使用它,只需打开一个 HTML 文件,然后键入/tidy. (这/<leader>关键。)

给你!无论如何,这不是一个快速的解决方案,但现在您可以更好地编辑那些巨大的、混乱的 HTML 文件。

于 2013-02-08T01:42:09.467 回答
2

您可以通过安装插件vim-autoformat自动集成tidyhtml-beautify。之后,您可以通过单次击键执行安装的任何格式化程序。

于 2015-06-13T15:58:16.933 回答
0

我尝试了通常的“gg=G”命令,这是我用来修复代码文件缩进的。但是,它似乎不适用于 HTML 文件。它只是删除了所有格式。

如果 vim 的 autoformat/indentgg=G似乎“损坏”(例如左缩进每一行),很可能是 indent 插件未启用/加载。它真的应该给出一个错误消息,而不是仅仅做不好的缩进,否则用户只会认为自动格式化/缩进功能很糟糕,而实际上它非常好。

要检查缩进插件是否已启用/加载,请运行:scriptnames. 看看是否.../indent/html.vim在列表中。如果没有,那么这意味着插件没有加载。在这种情况下,将此行添加到~/.vimrc

filetype plugin indent on

现在,如果您打开文件并运行:scriptnames,您应该会看到.../indent/html.vim. 然后运行gg=G,它现在应该执行正确的自动格式化/缩进。(虽然它不会添加换行符,所以如果所有的 html 代码都在一行上,它就不会缩进)。

注意:如果您:filetype plugin indent on在 vim 命令行上运行而不是~/.vimrc,则必须重新打开文件:e.

此外,您无需担心autoindentsmartindent设置,它们与此无关。

于 2018-06-22T17:47:51.003 回答