Подтвердить что ты не робот

Vim indent xml file

Я изучаю Vim, но я думал, что это простая задача, но я не могу заставить ее работать. У меня браузер SO, но решения для меня не работают.

Я пытаюсь правильно отложить файл (xml). Команда, которую я использую:

gg=G 

или   ggVG = (сделал это сам, вероятно, делает что-то другое;))

Мой .vimrc:

syntax on 
filetype plugin indent on 
set nu 
4b9b3361

Ответ 1

Мне нравится ответ Брейи. Тем не менее, я думаю, что следующее немного более гибкое, поскольку вам не нужно изменять ваш файл vimrc. Кроме того, легче форматировать отдельные части XML файла (что-то, что я часто делаю).

Сначала выделите XML, который хотите отформатировать.

Затем в нормальном режиме введите ! xmllint --format -

Ваша строка в нижней части будет выглядеть так:

:'<,'>!xmllint --format -

Затем нажмите enter.

Техническое объяснение

Выбранный текст отправляется команде xmllint, затем --format 'ed, а результаты xmllint помещаются над выбранным текстом в vim. - в конце команды - для приема стандартного ввода - который в этом случае является выбранным текстом, который vim отправляет на xmllint.

Ответ 2

Используйте внешнюю программу для отступов файлов xml. В этом случае я выбрал xmllint, поэтому установите команду в параметр equalprg:

:set equalprg=xmllint\ --format\ -

Теперь вы можете выполнить

gg=G

чтобы xmllint отформатировать ваши файлы xml.

Чтобы получить его каждый раз, когда вы используете , используйте autocommand, чтобы установить его.

autocommand из комментария ниже

au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null

Ответ 3

Простое решение, которое мне нравится, для которого не требуется сторонний инструмент, заключается в том, чтобы вставить новую строку перед каждым открывающим тегом '<... > '. Затем вы можете использовать стандартную автоиндексацию vim. Короче говоря:

  • %s/</\r</g
  • gg=G в автоматический отступ

Ответ 4

Краткий ответ: Используйте vim-sensible, который включает matchit.vim по умолчанию.

Длинный ответ: Я пробовал много стратегий для автоматического отступа XML в Vim, в том числе xmllint подход, обсуждавшийся на Vim вики. Проблема с xmllint (и тот же подход с другими внешними инструментами CLI, такими как xmlformat и tidy), заключается в том, что все они настаивают на выдавливании пустых строк. Если вы хотите только отступы XML, не удаляя пустые строки, комментарии и/или другое намеренное форматирование, тогда xmllint не лучший выбор.

Оказывается, команда Vim equals (=) уже поддерживает XML, если включен matchit.vim script. Один очень простой способ включить его - принять tpope vim-sensible. Затем форматирование XML будет "просто работать" из коробки.

Ответ 5

Это легко достичь, если ~/.vimrc правильно настроен.

Задайте следующие параметры в ~/.vimrc:

filetype indent on
set smartindent

Это позволяет перемещать курсор в верхнюю часть файла и отступать до конца: gg = G

Вы также можете выбрать нужный текст с визуальным режимом и нажать = для отступов.

Ответ 6

В VIM я автоматически отпечатываю весь файл (используя жесткие вкладки), используя следующую команду:

:%!XMLLINT_INDENT="^I" xmllint --format -

^I - это один символ, который вы создаете с помощью: CTRL + v, CTRL + i

Ответ 7

У меня была та же проблема. Оказалось, что линия

set viewdir=~\.vim\views\

в моей .vimrc вызвало эту проблему. Просто убедитесь, что у вас его нет.