20090421

Редактирование HTML и XML в Vim

Пару слов о редактировании HTML и XML файлов в Vim. О выделении HTML-тэгов я уже писал. Мне в конфигурации Vim по умолчанию не хватает
  • работающего % для перехода между парными тэгами (как обычно он переходит между парными скобками),
  • автоматического добавления закрывающих тэгов,
  • быстрого окружения тэгом выделенного фрагмента.
  • быстрого удаления окружающего тэга.
  • кодирования и раскодирования HTML Entities («>» как «>» и обратно)
Почти всё это сразу есть в плагине xml.vim. Кроме HTML Entites, настроить кодирование которых тоже можно.

Установка и настройка

Cкачать файл xml.vim, сохранить в ~/.vim/ftplugin/xml.vim, сделать на него символическую ссылку с ~/.vim/ftplugin/html.vim. В ~/.vimrc включить загрузку плагинов по типам файлов:
filetype plugin on
Теперь при открытии XML и HTML файлов будет включаться этот плагин.

Для кодирования HTML Entities поместить в ~/.vim/plugin/ файл htmlesc.vim.

Использование

Переход между парными тэгами. Чтобы перемещаться между тэгами, поместить курсор внутрь тэга (например, на </div>), нажать %, курсор переместится к парному тэгу (т.е. к <div>).

Вставка закрывающих тэгов происходит автоматически при нажатии >. Таким образом, набрав <div> мы получим:
<div></div>
При желании, можно переназначить комбинацию для автодополнения тэга. Для этого в ~/.vimrc до загрузки плагина определяем переменную xml_tag_completion_map. Например, так:
let xml_tag_completion_map = ">>"
— в этом случае закрывающий тэг появится только при повторном нажатии на >.

Окружение фрагмента тэгом тоже сразу работает. Достаточно выделить фрагмент и нажать \x. Программа спросит каким тэгом окружить и аккуратно вставит и открывающий, и закрывающий тэги.

Удаление тэга — обратная операция. Нажимаем \d и ближайший окружающий тэг будет убран, но весь текст внутри тэга останется нетронутым.

В последних двух командах можно вместо \ назначить любую другую клавишу. Почитать документацию по плагину: :help xml-plugin.txt.

Кодирование и раскодирование HTML Entities. Для этого, напомню, мы используем скрипт ~/.vim/plugin/htmlesc.vim. Ctrl+h превращает нормальный текст в HTML («>» в «&gt;»), а Ctrl+u — обратно. Работает построчно.

Другие способы

Есть плагин closetag.vim. Он просто добавляет команду, закрывающую тэги, команда привязывается к сочетанию клавиш и вызывается вручную. Использовать просто: Ctrl+_ — закрыть текущий тэг, это удобно, когда его текст тэга уже написан. Этот плагин я тоже использую.

Есть отдельный скрипт, позволяющий окружать фрагменты текста тэгом. Примерно то же самое, что и \x в xml.vim.

По теме

Выделение HTML-тегов, строк и блоков кода в Vim
Как быстро закомментировать/раскомментировать блок кода в Vim