Vim indent xml file
Я изучаю Vim, но я думал, что это простая задача, но я не могу заставить ее работать. У меня браузер SO, но решения для меня не работают.
Я пытаюсь правильно отложить файл (xml). Команда, которую я использую:
gg=G
или ggVG = (сделал это сам, вероятно, делает что-то другое;))
Мой .vimrc:
syntax on
filetype plugin indent on
set nu
Ответы
Ответ 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
.
Чтобы получить его каждый раз, когда вы используете vim, используйте 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
вызвало эту проблему. Просто убедитесь, что у вас его нет.