如何在 VI 中整理 HTML 文件的缩进?

我如何修复他的 HTML 文件的缩进,这是所有乱七八糟?

我尝试了通常的 "gg=G指令,这是我用来修复缩进的代码文件。然而,它在 HTML 文件上似乎不能正常工作。它只是删除了所有的格式。

我还试着设置 :filetype = xml,看看是否可以让它认为这是一个 XML 文件,但它仍然没有这样做。

118055 次浏览

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

shiftwidth为2的简单例子:

<html>
<body>
<p>
text
</p>
</body>
</html>

您尝试过在 Vim 站点上使用 HTML 缩进脚本吗?

有几件事情需要做到位,总结一下:

设置以下选项:

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

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

这里有一个重量级的解决方案,让你缩进,加上所有的 HTML 美观打印你不一定要关心,而你正在编辑。

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

接下来,创建一个描述您最喜欢的 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

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

还有一个文件: 将以下代码行添加到(或创建) html.vim,也是在 ftplugin中:

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

要使用它,只需打开一个 HTML 文件,键入 /tidy(/<leader>键)

这就对了!无论如何,这都不是一个快速的解决方案,但是现在您对编辑那些巨大的、混乱的 HTML 文件有了更好的装备。

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

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

如果根本不想输入 Vim,甚至可以将 | wq! fileOut.html添加到末尾,但只需清理文件即可。

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

: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 缩进脚本”。

使用智能缩进的主要问题是,如果 XML (或 HTML)位于一行上,因为它可能最终从 curl 请求返回,那么 gg=G就不会起作用。相反,我刚刚经历了一个很好的缩进使用整齐直接从 VI 调用:

:!tidy -mi -xml -wrap 0 %

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

:!tidy -mi -html -wrap 0 %

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

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

在上面的链接你有所有的信息:

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

干得漂亮!

您可以通过安装插件 Vim-autoformat自动集成 干净利落Html-美化。 在此之后,只需敲击一下键盘即可执行安装的任何格式化程序。

我尝试了常用的“ gg = G”命令,这是我用来修复代码文件缩进的命令。然而,它在 HTML 文件上似乎不能正常工作。它只是删除了所有的格式。

如果 vim 的自动格式/缩进 gg=G看起来是“破碎的”(比如每一行都向左缩进) ,那么很可能这个缩进插件没有启用/加载。它真的应该提供一个错误消息,而不是仅仅进行错误的缩进,否则用户只会认为自动格式/缩进功能是糟糕的,而实际上它是相当不错的。

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

filetype plugin indent on

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

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

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

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

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

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

然后是命令

gg=G

将缩进文件。

附加到 wisbucky 的回答,下面是我诊断和修复 gg=G缩进 xml 的基本用法的步骤:

发现问题:

gg=G
(says 115 lines indented but actually all lines are still at left edge)


:se indentexpr?
indentexpr=


:scriptnames
(look for one ending in /indent/xml.vim but it's not there)
(look in system folder to make sure /usr/share/vim/vim81/indent/xml.vim exists --- it does)

解决问题:

:se ft?
filetype=xml


:filetype
filetype detection:ON  plugin:OFF  indent:OFF


:filetype indent on
:filetype
filetype detection:ON  plugin:OFF  indent:ON


:e
:se indentexpr?
indentexpr=XmlIndentGet(v:lnum, 1)


gg=G

:se indentexpr?健全性检查来自 https://stackoverflow.com/a/11660992/115246