Vim .html.erb 的奇怪缩进

标签 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 .

最佳答案

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

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

这将为 p 添加一个缩进级别。 , linav标签。如果您想要 <p>仅标签,只需将其设置为“p”:
let g:html_indent_tags = 'p'

如果 vim 真的缩进初始 <p> ,那么您的 indentkeys 可能是选项不包含“>”字符。您可以通过执行 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'

注意.=的用法而不是 = .这是就地串联。您需要它,因为此时变量已经存在并且您不想删除它。

关于Vim .html.erb 的奇怪缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327206/

相关文章:

vim - 是否有可能在 Vim 中将 ä 显示为 ä?

ruby - Vim Command-T 插件错误 : could not load the C extension

python - 缩进一个空格

ubuntu - 我在 Vim 上编写 c++ 时得到 "Error detected while processing ~/vimrc"

vim - 我们可以在 Vim 中创建一个新的 op-pending 命令吗?

vim - 如何在Vim中使用 'wildignore'?

python - "Expected an indented block"错误?

php - 使用 php 以编程方式缩进自动生成的代码

linux - Bash脚本的正确缩进

emacs - 缩进 Erlang 的正确方法是什么?