在试图让vim
正确缩进.html
文件时,我遵循了此处列出的示例。
给定以下文件index.html
:
<html>
<body>
<p>
text
</p>
</body>
</html>
我尝试像这样打开它(忽略我的.vimrc
以确保它不会产生负面影响(
vim -u NONE index.html
然后我设置选项以启用自动缩进:
:filetype plugin indent on
:set filetype=html # abbrev - :set ft=html
:set smartindent # abbrev - :set si
然后我用 gg=G
缩进了整个文件,结果是:
<html>
<body>
<p>
text
</p>
</body>
</html>
我检查以确保html.vim
文件存在,并且它肯定在那里
$ head -2 ~/.vim/after/ftplugin/html.vim
" Vim syntax file
" Language: HTML
$ head -2 ~/.vim/ftplugin/html.vim
" Vim syntax file
" Language: HTML
我的 vim 版本是 7.4:
$ vim --version | head -1
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Sep 23 2013 16:12:20)
它包括智能缩进:
$ vim --version | grep smartindent
-ebcdic +mouse +smartindent +xim
我不知道为什么缩进不起作用!有什么线索或想法可以进一步研究这个问题吗?
FWIW,我正在运行 Ubuntu 13.04。
正如Cory的回答中提到的,目前分发的版本是Vimscript 2075。如果您转到该插件页面,您可以看到记录的所有标签,默认情况下这些标签会增加缩进。
您在示例中给出的所有标签都不在此默认列表中,但有很多标签。
由于 HTML 的缩进对用户偏好非常开放,因此插件维护者包含一个选项,可以在增加缩进的标签列表中添加或删除标签。参见 :help html-indent,其中建议:
You can add further tags with:
:let g:html_indent_inctags = "html,body,head,tbody"
7.3 和 7.4 之间,位于 $VIMRUNTIME/indent
中的捆绑html.vim
文件发生了更改。当前分发的版本实际上是 Vimscript #2075,默认情况下它不会缩进某些html
标签。
我推荐上面的 Ben 解决方案,但您也可以恢复到分布式html.vim
文件的先前版本。
为此,只需将现有的 7.4 html.vim
文件替换为 7.3 中的文件即可。
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
tar jxf vim-7.3.tar.bz2
cp vim73/runtime/indent/html.vim ~/.vim/indent/
截至 7.4.52
在 vim 中:
:let g:html_indent_inctags = "html,body,head,tbody"
:call HtmlIndent_CheckUserSettings()
其他在 .vimrc 中:
let g:html_indent_inctags = "html,body,head,tbody"
我只想把它添加到顶部答案的评论中,回馈,在花了太多时间没有得到答案之后,但显然没有足够的声誉:(
第一个故障排除步骤是运行 :scriptnames
。如果您没有看到.../indent/html.vim
,则表示插件未正确加载,缩进将无法正常工作。它可能只是在每一行中留下缩进。(问题是 vim 没有给出错误,所以看起来缩进做得很糟糕。
让它工作的最可靠方法是 把这条线放在你的~/.vimrc
.
filetype plugin indent on
然后再次使用 vim 打开文件,并运行 :scriptnames
.您现在应该看到.../indent/html.vim
。然后键入 gg=G
以自动格式化整个文件。
一个重要的注意事项让我绊倒了一段时间:如果您不将其放入~/.vimrc
,而是在打开文件后键入:filetype plugin indent on
,则必须再次使用:e
重新打开文件。在打开文件之前,必须加载缩进插件。运行:scriptnames
进行确认。
旁注:您无需担心smartindent
或autoindent
设置,这些设置用于其他用途。