如何修复他的巨大html文件的缩进,这些文件都搞砸了?
我尝试了通常的"gg=G" command,这是我用来修复代码文件缩进的内容。但是,它似乎不适用于HTML文件。它只是删除了所有格式。
我还尝试设置:filetype = xml
,看看是否欺骗它认为这是一个XML文件会有所帮助,但它仍然没有这样做。
答案 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标记html
,head
,body
以及其他一些标记默认情况下不缩进。这是有道理的,因为html文件中的几乎所有内容都属于这些标记。如果你真的想要,你可以像这样缩进这些标签:
:let g:html_indent_inctags = "html,body,head,tbody"
答案 4 :(得分:10)
这是我的解决方案,可以很好地打开“丑陋”的HTML,方式很好:
vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"
sw
命令是因为我的默认值是4,这对于HTML来说太高了。
下一部分在每个元素(>
)
然后使用=
然后unhighlight >
(因为我的vimrc中有set hlsearch
)
然后删除所有空的/仅空白行(请参阅here以获取更多信息,这也是双重转义的,因为它在shell中)
如果您根本不想输入Vim,甚至可以将| wq! fileOut.html
添加到最后,只需清理文件即可。
答案 5 :(得分:6)
我使用这个脚本: https://github.com/maksimr/vim-jsbeautify
在上面的链接中,您拥有所有信息:
:call HtmlBeautify()
这份工作做得很漂亮!
答案 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>
密钥。)
答案 8 :(得分:2)
您可以通过安装插件tidy自动集成html-beautify和vim-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
。
此外,您无需担心autoindent
和smartindent
的设置,它们与此无关。