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

Cor*_*ein 24 html vim

在尝试正确vim缩进.html文件时,我按照这里列出的示例进行操作.

给出以下文件index.html:

<html>
  <body>
    <p>
    text
    </p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我试图打开它,像这样(忽略我.vimrc,以确保它不会干扰负)

vim -u NONE index.html
Run Code Online (Sandbox Code Playgroud)

然后我设置选项以启用自动缩进:

:filetype plugin indent on
:set filetype=html           # abbrev -  :set ft=html
:set smartindent             # abbrev -  :set si
Run Code Online (Sandbox Code Playgroud)

然后我缩进整个文件gg=G,这是结果:

<html>
<body>
<p>
text
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我检查确保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
Run Code Online (Sandbox Code Playgroud)

我的vim版本是7.4:

$ vim --version | head -1
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Sep 23 2013 16:12:20)
Run Code Online (Sandbox Code Playgroud)

它包括智能缩进:

$ vim --version | grep smartindent
-ebcdic          +mouse           +smartindent     +xim
Run Code Online (Sandbox Code Playgroud)

我不知道为什么压痕不起作用!有进一步研究这个问题的线索或想法吗?

FWIW,我正在运行Ubuntu 13.04.

Ben*_*Ben 25

正如Cory的回答所提到的,目前分发的版本是Vimscript 2075.如果您转到该插件页面,您可以看到记录的所有标签,默认情况下会增加缩进.

您在示例中给出的标签都不在此默认列表中,但有很多标签.

由于HTML的缩进对用户偏好非常开放,因此插件维护者已经包含一个选项,用于在增加缩进的标记列表中添加或删除标记.请参阅:help html-indent,其中建议:

You can add further tags with:

  :let g:html_indent_inctags = "html,body,head,tbody"
Run Code Online (Sandbox Code Playgroud)

  • 每个软件都有合理的默认值,我认为这是一个特殊的例子,其中合理的默认值非常失败. (9认同)
  • 我个人认为<html>,<head>或<body>中的任何缩进都被浪费了.每个HTML文档都有这些,他们并没有真正添加任何结构.<p>我同意不应该缩进,因为我通常在文本中使用它而不是开始新行.所以我的意见是,给出的具体例子,正确缩进.如果你添加一个div,一个部分或一个列表,它会缩进,因为它会增加结构. (3认同)

Cor*_*ein 14

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

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

要执行此操作,只需使用7.3中的html.vim文件替换现有的7.4 文件.

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/
Run Code Online (Sandbox Code Playgroud)

  • 该脚本的维护者实际上非常关心并要求投诉(参见例如:[vim-dev list](https://groups.google.com/d/msg/vim_dev/1qagiM_Dpyo/v0AheXEOX0wJ)),所以本着精神开源你应该直接告诉他,所以他可以改进他的缩进脚本 (2认同)

mil*_*svp 7

截至7.4.52

在vim内:

:let g:html_indent_inctags = "html,body,head,tbody"
:call HtmlIndent_CheckUserSettings()
Run Code Online (Sandbox Code Playgroud)

.vimrc中的其他内容:

let g:html_indent_inctags = "html,body,head,tbody"
Run Code Online (Sandbox Code Playgroud)

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