Как привести в порядок отступ HTML-файла в VI? - PullRequest
119 голосов
/ 03 мая 2009

Как мне исправить отступы его огромных HTML-файлов, которые все испортили?

Я попробовал обычную команду "gg = G" , которую я использую для исправления отступа файлов кода. Тем не менее, это не похоже на работу с файлами HTML. Он просто удалил все форматирование.

Я также попытался установить :filetype = xml, чтобы посмотреть, поможет ли это обмануть его, думая, что это XML-файл, но он все равно этого не сделал.

Ответы [ 10 ]

166 голосов
/ 02 января 2013

Есть несколько вещей, которые все должны быть на месте. Просто чтобы суммировать их все в одном месте:

Установите следующую опцию:

:filetype indent on
:set filetype=html           # abbrev -  :set ft=html
:set smartindent             # abbrev -  :set si

Затем либо переместите курсор в начало файла и сделайте отступ до конца: gg =G
Или выберите нужный текст для отступа и нажмите = , чтобы сделать отступ.

84 голосов
/ 03 мая 2009

С filetype indent on внутри моего .vimrc, Vim довольно хорошо вставляет HTML файлы.

Простой пример с shiftwidth из 2:

<html>
  <body>
    <p>
    text
    </p>
  </body>
</html>
51 голосов
/ 13 ноября 2013

Основная проблема с использованием интеллектуального отступа состоит в том, что если XML (или HTML) находится на одной строке, поскольку он может в конечном итоге вернуться из запроса curl, то gg=G не сработает. Вместо этого я только что испытал хороший отступ, используя tidy, напрямую вызванный из VI:

:!tidy -mi -xml -wrap 0 %

Это в основном говорит VI, что нужно вызывать tidy для очистки XML-файла, не оборачивая строки, чтобы они помещались по умолчанию в строки шириной 68 символов. Я обработал большой 29 МБ XML-файл, и это заняло 5 или 6 секунд. Я предполагаю, что для файла HTML команда должна быть:

:!tidy -mi -html -wrap 0 %

Как уже упоминалось в комментариях, tidy - это базовый инструмент, который вы можете найти во многих базовых системах Linux / MacOS. Вот страница проекта, если вы хотите, чтобы она у вас была, но не пишите: HTML Tidy .

Надеюсь, это поможет.

46 голосов
/ 14 октября 2013

Как объясняет Тайлерл, установите следующее:

:filetype indent on
:set filetype=html
:set smartindent

Однако!

Обратите внимание, что в vim 7.4 HTML-теги html, head, body и некоторые другие * не имеют отступ по умолчанию Это имеет смысл, поскольку почти весь контент в html-файле попадает под эти теги. Если вы действительно хотите, вы можете получить эти теги с отступом, например, так:

:let g:html_indent_inctags = "html,body,head,tbody" 

См. здесь и здесь для получения дополнительной информации.

10 голосов
/ 01 мая 2013

Это моё решение, которое прекрасно работает для открытия "некрасивого" HTML-кода с хорошим разнесением:

vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"

Команда sw вызвана тем, что по умолчанию установлено значение 4, что слишком много для HTML.

Следующая часть добавляет символ новой строки (Вим думает, что это возврат каретки, вздох) после каждого элемента (>)

Затем заново сделать отступ для всего файла с помощью =

Тогда не выделяйте > (так как у меня set hlsearch в моем vimrc)

Затем удалите все пустые / пробельные строки (см. здесь , более подробно, также это с двойным экранированием, потому что оно в оболочке)

Вы даже можете добавить | wq! fileOut.html в конец, если вы вообще не хотите заходить в Vim, а просто очистите файл.

6 голосов
/ 17 апреля 2014

Я использую этот скрипт: https://github.com/maksimr/vim-jsbeautify

В приведенной выше ссылке у вас есть вся информация:

  1. Установить
  2. Настройка (копия из первого примера)
  3. Пробег :call HtmlBeautify()

Красиво справляется с работой!

4 голосов
/ 08 февраля 2013

Вот мощное решение, которое дает вам отступ, плюс вся красивая HTML-печать, о которой вам не обязательно беспокоиться во время редактирования.

Сначала скачайте Tidy . Убедитесь, что вы добавили двоичный файл в свой путь, чтобы вы могли вызывать его из любого места.

Затем создайте файл конфигурации, описывающий ваш любимый HTML-код. Документация не подходит для Tidy, но вот обзор и список всех опций . Вот мой конфигурационный файл:

bare: yes
break-before-br: no
clean: yes
drop-proprietary-attributes: yes
fix-uri: yes
indent-spaces: 4
indent: yes
logical-emphasis: yes
markup: yes
output-xhtml: yes
quiet: yes
quote-marks: yes
replace-color: yes
tab-size: 4
uppercase-tags: no
vertical-space: yes
word-2000: yes
wrap: 0

Сохраните это как tidyrc_html.txt в папке ftplugin (в папке vimfiles).

Еще один файл: добавьте следующую строку (или создайте) html.vim, также в ftplugin:

map <leader>tidy :%! tidy -config ~/vimfiles/ftplugin/tidyrc_html.txt <CR>

Чтобы использовать его, просто откройте файл HTML и введите /tidy. (Это / является ключом <leader>.)

Вот, пожалуйста! В любом случае, это не быстрое решение, но теперь вы немного лучше подготовлены для редактирования этих огромных, испорченных HTML-файлов.

4 голосов
/ 03 мая 2009

Вы пытались использовать скрипт отступа HTML на сайте Vim?

2 голосов
/ 13 июня 2015

Вы можете автоматически интегрировать tidy и html-beautify , установив плагин vim-autoformat . После этого вы можете выполнить любое установленное средство форматирования одним нажатием клавиши.

0 голосов
/ 22 июня 2018

Я попробовал обычную команду "gg = G", которую я использую для исправления отступа файлов кода. Тем не менее, это не похоже на работу с файлами HTML. Он просто удалил все форматирование.

Если автоформат формата / отступа vim gg=G кажется "неработающим" (например, оставить отступ в каждой строке), скорее всего плагин отступа не включен / не загружен. Он должен действительно выдавать сообщение об ошибке вместо того, чтобы делать плохой отступ, иначе пользователи просто думают, что функция автоформатирования / отступа ужасна, хотя на самом деле она довольно хороша.

Чтобы проверить, включен ли плагин отступа / загружен, запустите :scriptnames. Посмотрите, есть ли .../indent/html.vim в списке. Если нет, то это означает, что плагин не загружен. В этом случае добавьте эту строку в ~/.vimrc:

filetype plugin indent on

Теперь, если вы откроете файл и запустите :scriptnames, вы должны увидеть .../indent/html.vim. Затем запустите gg=G, что теперь должно сделать правильный автоформат / отступ. (Хотя он не добавляет новые строки, поэтому, если весь HTML-код находится в одной строке, он не будет иметь отступ).

Примечание: если вы запускаете :filetype plugin indent on в командной строке vim вместо ~/.vimrc, вы должны заново открыть файл :e.

Кроме того, вам не нужно беспокоиться о настройках autoindent и smartindent, они не имеют к этому отношения.

...