Я изучаю Vim, но я думал, что это простая задача, но я не могу заставить ее работать. У меня есть браузер SO, но решения для меня не работают.
Я пытаюсь правильно сделать отступ для файла (xml). Я использую следующую команду:
gg=G
или ggVG = (сам придумал, наверное, что-то другое делает;))
Мой .vimrc:
syntax on
filetype plugin indent on
set nu
:set ft? indentexpr?
ли он читаетсяfiletype=xml indentexpr=XmlIndentGet(v:lnum,1)
?!m'ggVG=''
, которая просто сохраняет линию, на которой вы находитесь, и перемещается к ней после повторного отступа файла.Ответы:
Мне нравится ответ Берея. Тем не менее, я думаю, что следующее немного более гибко, поскольку вам не нужно изменять свой
vimrc
файл. Кроме того, легче форматировать отдельные части XML-файла (что я часто делаю).Сначала выделите XML, который вы хотите отформатировать.
Затем в обычном режиме введите
! xmllint --format -
Ваша командная строка внизу будет выглядеть так:
:'<,'>!xmllint --format -
Затем нажмите Enter.
Техническое объяснение
Выбранный текст отправляется
xmllint
команде, затем--format
'ed, и результатыxmllint
помещаются поверх выбранного текста в vim. Значок-
в конце команды предназначен для получения стандартного ввода - в данном случае это выделенный текст, который отправляет vimxmllint
.источник
:%!xmllint --format -
,%
означает весь объем этого XML - файл.apt-cache search
, а неapt-get
при поиске пакетов и их содержимого.libxml2-utils
содержит недостающий инструмент.Используйте внешнюю программу для создания отступов для
xml
файлов. В этом случае я выбралxmllint
, поэтому установите для команды значениеequalprg
:Теперь вы можете выполнить
чтобы позволить
xmllint
форматировать вашиxml
файлы.Чтобы получить это каждый раз, когда вы используете vim, используйте,
autocommand
чтобы установить его.autocommand
из комментария нижеисточник
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
. Источник - ku1ik.com/2011/09/08/…libxml2-utils
пакет, чтобы получить xmllintПростое решение, которое мне нравится, которое не требует каких-либо сторонних инструментов, - это вставлять новую строку перед каждым открывающим тегом '<...>'. Затем вы можете использовать стандартный автоматический отступ vim. Коротко:
%s/</\r</g
gg=G
делать отступыисточник
%s/></>\r</g
, чтобы каждый текстовый элемент оставался в одной строке.%s/> *</>\r</g
Краткий ответ: включите matchit.vim . Вы можете добавить
packadd matchit
в свой.vimrc
или использовать vim-sensible , который включает его по умолчанию.Длинный ответ: я пробовал много стратегий автоматического отступа XML в Vim, включая подход xmllint, обсуждаемый в вики Vim . Проблема с
xmllint
(и тот же подход с другими внешними инструментами CLI, такими какxmlformat
иtidy
тоже) заключается в том, что все они настаивают на выдавливании пустых символов новой строки. Если все, что вам нужно, это сделать отступ в XML, не удаляя пустые строки, комментарии и / или другое намеренное форматирование, тоxmllint
это не лучший выбор.Оказывается, команда Vim equals (=) уже поддерживает XML, пока включен сценарий matchit.vim . Один из очень простых способов сделать это - использовать vim-sensible tpope . Другой - добавить
packadd matchit
в ваш.vimrc
. Тогда форматирование XML будет "просто работать" из коробки.источник
matchit.vim
это реальное решение. Вы можете включить его в своемvimrc
, добавив эту строку:packadd matchit
=
команду. Если вы находитесь в верхней части файла, вы можете печатать=G
. В качестве альтернативы вы можете перейти к началу файла с помощью1G
, войти в режим выбора визуальной строки с помощьюV
, затем ввести,G
чтобы перейти к нижней части файла, выбрав все. А затем нажмите,=
чтобы сделать отступ для всего файла. Точно так же, если вы хотите сделать отступ только для части файла, выберите только эту часть и нажмите=
.=
не будет вставлять (или удалять) разрывы строк, которых еще нет. Это влияет только на отступ в начале. Так чтоmatchit.vim
это не решение для красивого печатного XML, сжатого в одну строку. Используйтеxmllint
или подобное для этого.Этого легко добиться, если правильно настроить ~ / .vimrc.
Установите следующие параметры в ~ / .vimrc:
Это позволяет переместить курсор в начало файла и сделать отступ до конца: gg = G
Вы также можете выбрать нужный текст в визуальном режиме и нажать =, чтобы сделать отступ.
источник
.vimrc
вместо.bashrc
.В VIM я автоматически делаю отступ для всего файла (используя жесткие вкладки), используя следующую команду:
Это
^I
единственный символ, который вы создаете с помощью: CTRL+ v, CTRL+iисточник
У меня такая же проблема. Оказалось, что линия
в моем случае
.vimrc
возникла проблема. Только убедитесь, что у вас его нет.источник
Ответ Джесси Хогана хорош, но я бы предпочел более простой ответ:
Пока вы находитесь в vim и ваш XML-файл открыт, в обычном режиме напишите следующее:
затем нажмите Enter. Все ваши XML-файлы будут отформатированы.
помните, вы должны были установить xmllint раньше.
источник
для тех , кто один , который использует
coc.nvim
плагин, вы можете установить сcoc-xml
помощью:CocInstall coc-xml
, то отображение ключа формата в файле конфигурации:nmap <silent> fm <Plug>(coc-format)
. С этого момента вы можете легко форматировать не только файл xml, но и другой файл.источник