.html.erb的Vim Weird缩进

时间:2011-09-06 23:10:45

标签: vim indentation

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

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

</p>发生这种情况后我怎么按回车?

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

请注意,我确实有filetype indent on

3 个答案:

答案 0 :(得分:4)

Vim的默认html缩进不会缩进<p>标记。这意味着,它不仅不会在</p>之后删除缩进级别,而且在打开<p>之后也可能不会自动添加缩进级别。如果是这种情况,您可以通过设置变量g:html_indent_tags来更改此行为。它应包含与标记名称匹配的正则表达式。例如:

let g:html_indent_tags = 'p\|li\|nav'

这会为plinav标记添加一定级别的缩进。如果您只想要<p>标记,只需将其设置为“p”:

let g:html_indent_tags = 'p'

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

setlocal indentkeys+=<<>

修改

不幸的是,vim似乎取消了那个变量......这对我来说根本没有意义,但你可以做的一件事就是将变量赋值添加到.vim/after/ftplugin/html.vim。这应该可以解决问题。就个人而言,我做了一些不同的事情 - 我已将默认文件复制到.vim/indent/html.vim并注释掉删除变量的行。尽管如此,使用after目录可能是一个更好的主意。

修改

html5插件似乎没有受到此问题的影响。改为安装它可能是一个好主意。否则,g:html_indent_tags变量仍然是可以去的地方,但最佳位置可能是~/.vim/after/indent/html.vim

let g:html_indent_tags .= '\|p\|nav\|othertags'

请注意.=而非=的使用情况。这是就地连接。你需要它,因为此时变量已经存在,你不想删除它。

答案 1 :(得分:1)

我遇到了同样的问题。 Tim Pope有一个出色的Vim插件,默认情况下会为缺少的东西添加缩进。 https://github.com/tpope/vim-ragtag

答案 2 :(得分:0)

我通过全能的谷歌来解决这个问题。

为了补充Andrew在上面所说的内容,对于OSX上的那些人,您可能想看看/Applications/MacVim.app/Contents/Resources/vim/runtime/indent/html.vim并且必须进行修改变得明显。

我简直不敢相信我花了这么多时间来度过这段糟透的&lt; li&gt; s!