Vim.html.erb的奇怪缩进

Vim.html.erb的奇怪缩进,vim,indentation,Vim,Indentation,我正在输入我的.html.erb文件,我意识到vim缩进的这种奇怪行为 <p> <strong>Expires On:</strong> <%= @item.expires_on %> </p> 到期日期: 为什么在之后按enter键时会发生这种情况 <p> <strong>Expires On:</strong> <%= @item.expires_on %>

我正在输入我的.html.erb文件,我意识到vim缩进的这种奇怪行为

<p>
  <strong>Expires On:</strong>
  <%= @item.expires_on %>
</p>

到期日期:

为什么在

之后按enter键时会发生这种情况

<p>
  <strong>Expires On:</strong>
  <%= @item.expires_on %>
  </p>
  _ <= new cursor space 

到期日期:


_Vim的默认html缩进不缩进标记。这意味着,它不仅不会删除

之后的缩进级别,而且可能不会在打开
之后自动添加缩进级别。如果是这种情况,可以通过设置变量
g:html\u indent\u tags
来更改此行为。它应该包含一个与标记名称匹配的正则表达式。例如:

let g:html_indent_tags = 'p\|li\|nav'
这将为
p
li
nav
标记添加缩进级别。如果只需要
标记,只需将其设置为“p”:

如果vim确实缩进了初始的
,那么您的
indentkeys
选项可能不包含“>”字符。您可以通过执行
set indentkeys
来检查其内容。如果它不包含
,您可以将其添加到
.vim/ftplugin/html.vim

setlocal indentkeys+=<<>
let g:html_indent_tags .= '\|p\|nav\|othertags'

注意使用
=
代替
=
。这是就地连接。你需要它,因为此时变量已经存在,你不想删除它。

我通过万能的谷歌找到了这个问题


为了补充Andrew上面所说的内容,对于OSX上的用户来说,您可能需要浏览一下/Applications/MacVim.app/Contents/Resources/vim/runtime/indent/html.vim,必要的修改应该是显而易见的


我简直不敢相信我花了这么多时间忍受缩进不良的
  • s

    我也有同样的问题。Tim Pope有一个优秀的Vim插件,可以为默认情况下缺少的东西添加缩进

    奇怪的是,我把let g:html_indent_tags='p\| li\|nav'放在my.vimrc中,但它没有效果,但当我在vim窗口中实际运行它时,它就工作了。我应该把这个放在哪里?呃,对,这个解决方案似乎有点问题。我已经更新了我的答案。我设置了这个变量(并且执行
    :让g:html\u indent\u tags
    显示它没有被取消设置),但是它仍然没有缩进
    标签或
  • 标签。Vim取消了变量的设置,但也让它在之后再次为它指定一个模式,看起来像我给出的示例。即使变量存在,也可能没有正确的值。如果它不是以
    p\|li\|nav
    开头,则不会缩进这些标记。要解决这个问题,您可以将默认文件复制到
    ~/.vim/indent/html.vim
    中,并删除
    unlet
    ,就像我上面解释的那样。为了简化,这里是我自己的vimfiles中经过调整的文件:。使用此功能,您应该能够将
    g:html\u indent\u tags
    设置为您需要的任何内容。作为HTML5和.erb用户,您推荐的HTML5插件确实为我带来了好处。谢谢“必要的修改应该变得明显”。。。您不能提供代码示例吗?我做了我认为必要的修改,没有任何风险。也许是因为我用了杰纳斯…?哦。很抱歉您只需添加
    调用HtmlIndentPush('li')
    调用HtmlIndentPush('p')
    ,等等:)。但是,您必须确保Janus/Vimrc没有加载不同的html缩进文件。他有一整套有用的Vim插件<代码>vim rails
    功能极其强大;我还使用
    vim ruby
    vim bundler
    vim sleuth
    vim unpaired
    let g:html_indent_tags .= '\|p\|nav\|othertags'