在尝试让vim
正确缩进.html
个文件时,我按照here列出的示例进行了操作。
给出以下文件index.html
:
<html>
<body>
<p>
text
</p>
</body>
</html>
我尝试打开它like so(忽略我的.vimrc
以确保它不会产生干扰)
vim -u NONE index.html
然后我设置the options以启用自动缩进:
: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。
答案 0 :(得分:25)
正如Cory的回答所提到的,当前分发的版本是Vimscript 2075。如果您转到该插件页面,您可以看到记录的所有标签,默认情况下会增加缩进。
您在示例中提供的任何标记都不在此默认列表中,但有很多标记。
由于HTML的缩进对用户偏好非常开放,因此插件维护者已经包含一个选项,用于在增加缩进的标记列表中添加或删除标记。请参阅:help html-indent,其中暗示:
You can add further tags with:
:let g:html_indent_inctags = "html,body,head,tbody"
答案 1 :(得分:14)
在版本7.3和7.4之间,位于html.vim
的捆绑$VIMRUNTIME/indent
文件已更改。当前分发的版本实际上是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/
答案 2 :(得分:7)
截至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"
我想将此添加到对最佳答案的评论中,在花费太多时间没有得到工作答案之后回馈,但显然没有足够的声誉:(
答案 3 :(得分:0)
故障排除的第一步是运行: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
设置,这些设置是用于其他用途的。