HTML缩进不适用于已编译的Vim 7.4,任何想法?

时间:2013-10-11 17:05:19

标签: html vim

在尝试让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。

4 个答案:

答案 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进行确认。

旁注:您无需担心smartindentautoindent设置,这些设置是用于其他用途的。