Vim Weird отступ для .html.erb - PullRequest
       0

Vim Weird отступ для .html.erb

5 голосов
/ 07 сентября 2011

Я печатаю в своем файле .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 ]

4 голосов
/ 07 сентября 2011

Отступ HTML по умолчанию для Vim не делает отступ для тегов <p>. Это означает, что он не только не удалит уровень отступа после </p>, но также, вероятно, не добавит уровень отступа автоматически после открытия <p>. Если это так, вы можете изменить это поведение, установив переменную g:html_indent_tags. Он должен содержать регулярное выражение, соответствующее имени тега. Например:

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

Это добавит уровень отступа для тегов p, li и nav. Если вы хотите использовать только теги <p>, просто установите для него значение «p»:

let g:html_indent_tags = 'p'

Если vim действительно равен с отступом начального <p>, то возможно, что ваш параметр indentkeys не содержит символа ">". Вы можете проверить его содержимое, выполнив set indentkeys. Если он не содержит <>>, вы можете добавить его в .vim/ftplugin/html.vim:

setlocal indentkeys+=<<>

EDIT

К сожалению, vim, кажется, удаляет эту переменную ... Это вообще не имеет смысла для меня, но вы могли бы добавить одну переменную в .vim/after/ftplugin/html.vim. Это должно сделать свое дело. Лично я сделал что-то другое - я скопировал файл по умолчанию в .vim/indent/html.vim и закомментировал строки, которые удаляют переменную. Тем не менее, использование каталога after, вероятно, является лучшей идеей.

EDIT

Плагин html5 , похоже, не страдает от этой проблемы. Это может быть хорошей идеей, чтобы просто установить это вместо этого. В противном случае, переменная g:html_indent_tags по-прежнему будет подходящим местом, но лучшее место для нее, вероятно, ~/.vim/after/indent/html.vim:

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

Обратите внимание на использование .= вместо =. Это конкатенация на месте. Вам это нужно, поскольку переменная уже существует, и вы не хотите ее удалять.

1 голос
/ 19 июня 2013

У меня была такая же проблема. У Tim Pope есть отличный плагин Vim, который добавляет отступ для вещей, отсутствующих по умолчанию. https://github.com/tpope/vim-ragtag

0 голосов
/ 14 декабря 2011

Я получил этот вопрос через Всемогущего Google.

В дополнение к сказанному Эндрю выше, для тех из вас, кто работает в OSX, вы можете заглянуть в /Applications/MacVim.app/Contents/Resources/vim/runtime/indent/html.vim иНеобходимые модификации должны стать очевидными.

Не могу поверить, что я провел так много времени, страдая от плохо с отступом

s!
...