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


130

我该如何解决他所有乱七八糟的html文件的缩进?

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

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

Answers:


91

随着filetype indent on里面我的.vimrc,Vim的缩进HTML文件相当不错。

带有shiftwidth2的简单示例

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

15
复制此问题页面的html并将其粘贴到html文件中。使用VIM打开,输入“ set smartindent”,然后输入“ gg = G”,它不能修复文件的缩进。
2009年

15
这个对我有用。设置ft = html <cr>设置si <cr> gg = G <cr>。很好地格式化此页面。
唐·雷巴

5
+1验证了“打开/关闭文件类型缩进”可以打开或关闭魔术。
Wim Coenen,2009年

4
是的,在设置智能缩进之后,在上面设置filetype = html和filetype ident对我有用。
mmcdole,2009年

22
chovy.com/web-development/fix-indentation-and-tabs-in-vim中发现,我需要在缩进文件类型后用:e重新加载文件。
马克·斯托伯

189

有几件事都需要准备就绪。只是将它们汇总在一个位置:

设置以下选项:

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

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


@tyrel,谢谢,但是对我来说却不起作用。这是文件的内容:pastebin.com/gagia8W2。该文件称为home.html。我对缩进.php文件没有任何问题。在这里,您有我的.vimrc:pastebin.com/FAJ0MCA9
ziiweb

1
有没有一种方法可以在.vimrc中进行设置?我不想每次打开HTML文件都告诉它它是HTML文件。非常感谢gg,=,G快捷键。真的很方便。
zakishaheen 2014年

1
请注意,在vim 7.4默认的缩进设置将无法在这个例子中,如htmlbodyp默认情况下不缩进。看到这个答案
Cory Klein

2
smartindent没必要 同样针对C和C ++进行了调整,我更喜欢使用更通用的名称autoindent
科斯2014年

它在vim7.4上很好用。@tylerl有什么方法可以使7.4中的html文件的配置永久化?
xaph

62

使用智能缩进的主要问题是,如果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系统上找到。如果您希望拥有但没有,则这是projet的页面:HTML Tidy


1
我认为不需要html,因为它默认为html
lsiebert 2014年

4
@Isieber与您达成协议。但是,我认为它使理解逻辑更容易,甚至有人认为它是良好实践。
oscaroscar

2
仅供参考,如果HTML包含SVG(例如图表等),请整理一下。
亚历克斯奎因

1
是的,如果html代码在一行上,则vim indent命令将不起作用!
wisbucky

除了字典中的单词以外,什么是整洁的?如果不链接到项目,这不是一个完整的答案。
布鲁诺·布罗诺斯基

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


这是我书中的赢家!在Windows上使用Vim 7.4,效果非常好!:D
Michael J

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删除空白行 ”,这也是双重转义的,因为它在外壳中)。

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


干净的解决方案!我将其修改为:%s/>\s*/>\r/g(添加了一个g用于全局替换,并\s*去除尾随空白)。我还添加:%s/</\r</g了在左方括号之前添加换行符的功能。否则,像<td>foo</td>这样的标签将像<td>和一样拆分foo</td>
wisbucky

公平地说,我默认情况下启用了全局替换,这就是为什么它不在我的解决方案中。
adam_0

7

我使用以下脚本:https : //github.com/maksimr/vim-jsbeautify

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

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

做得好漂亮!


3
哈哈,你为什么要使用节点+ JS清理HTML在vim,这已经有这个能力,内置超过节点甚至更长的存在......博格尔斯我的心..
MB21

4

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


+1,我没看到。如果我不需要运行脚本,那很好,但看起来这可能是唯一的方法。
2009年

现在不推荐使用此脚本,并且vim带有更新的版本(例如/usr/share/vim/vim74/indent/html.vim)。“ 2014年7月4日:Vim 7.4.356或更高版本包含该脚本的后代(官方脚本现在由Bram维护并包含大量更改)”
wisbucky

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.txtftplugin文件夹(在vimfiles)。

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

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

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

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



0

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

如果vim的自动格式化/缩进 gg=G似乎“中断”(例如,左缩进每一行),则很可能未启用/加载缩进插件。它确实应该给出错误消息,而不是仅仅进行不好的缩进,否则用户实际上会认为自动格式化/缩进功能非常好,而实际上它还不错。

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

filetype plugin indent on

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

注意:如果您使用:filetype plugin indent on的不是vim命令行~/.vimrc,则必须重新打开该文件:e

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.