24

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

4

4 回答 4

25

正如 Cory 的回答中提到的,当前分发的版本是Vimscript 2075。如果你去那个插件页面,你可以看到所有默认情况下会增加缩进的标签。

您在示例中提供的所有标签均不在此默认列表中,但其中有很多。

由于 HTML 的缩进对用户的偏好非常开放,因此插件维护者提供了一个选项,可以在增加缩进的标签列表中添加或删除标签。请参阅 :help html-indent,其中建议:

You can add further tags with:

  :let g:html_indent_inctags = "html,body,head,tbody"
于 2013-10-12T02:59:34.147 回答
14

在版本 7.3 和 7.4 之间,html.vim位于的捆绑文件发生了$VIMRUNTIME/indent变化。当前分发的版本实际上是Vimscript #2075,默认情况下不缩进某些html标签。

我推荐上面 Ben 的解决方案,但您也可以恢复到以前版本的分布式html.vim文件。

为此,只需将现有的 7.4html.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/
于 2013-10-11T21:43:13.830 回答
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"

我只想将其添加到对最佳答案的评论中,以回馈,在花了太多时间没有得到工作的答案之后,但显然没有足够的声誉:(

于 2015-12-18T18:20:01.223 回答
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设置,那些是为了别的。

于 2018-06-22T01:46:02.807 回答