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

时间:2009-05-02 20:26:57

标签: html vim vi indentation

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

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

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

11 个答案:

答案 0 :(得分:165)

有几件事都需要到位。只是在一个地方总结一下:

设置以下选项:

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

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

答案 1 :(得分:84)

filetype indent on内部.vimrc,Vim非常合适地缩进HTML文件。

shiftwidth为2的简单示例:

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

答案 2 :(得分:51)

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

:!tidy -mi -xml -wrap 0 %

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

:!tidy -mi -html -wrap 0 %

如评论中所述,tidy是一个基本工具,您可以在许多基础Linux / MacOS系统上找到它。这是projet的页面,如果你希望你拥有它,但不要:HTML Tidy

希望这可以提供帮助。

答案 3 :(得分:46)

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

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

然而!

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

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

有关详细信息,请参阅herehere

答案 4 :(得分:10)

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

vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"

sw命令是因为我的默认值是4,这对于HTML来说太高了。

下一部分在每个元素(>

之后添加换行符(Vim认为它是一个回车,叹息)

然后使用=

重新缩进整个文件

然后unhighlight >(因为我的vimrc中有set hlsearch

然后删除所有空的/仅空白行(请参阅here以获取更多信息,这也是双重转义的,因为它在shell中)

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

答案 5 :(得分:6)

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

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

  1. 安装
  2. 配置(从第一个示例复制)
  3. 运行:call HtmlBeautify()
  4. 这份工作做得很漂亮!

答案 6 :(得分:4)

您是否尝试在Vim网站上使用HTML缩进脚本?

答案 7 :(得分:4)

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

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

接下来,创建一个描述您喜欢的HTML风格的配置文件。文档对Tidy来说不是很好,但这里有一个overview和一个all the options列表。这是我的配置文件:

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文件。

答案 8 :(得分:2)

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

答案 9 :(得分:2)

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

基本上,您首先需要使用以下命令来中断每一行,该命令用相同的字符替换Type "help", "copyright", "credits" or "license" for more information. >>> from global_toolkit import section >>> section.Section <class 'global_toolkit.serialization.section.Section'> >>> from global_toolkit.section import Section Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'global_toolkit.section' >>> ,但中间使用换行符。

><

然后输入命令

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

将缩进文件。

答案 10 :(得分:0)

  

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

如果vim的自动格式化/缩进gg=G似乎被“破坏”(例如,每行左缩进),则很可能未启用/加载缩进插件。它确实应该提供一条错误消息,而不是仅仅进行糟糕的缩进,否则用户实际上会认为自动格式化/缩进功能相当不错。

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

filetype plugin indent on

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

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

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