Ответы:
Функциональность уже существует, чтобы переформатировать этот буфер, чтобы быть немного читаемым пользователем?
Конечно, и у вас есть много вариантов. Я бы, вероятно, передал его внешней программе, используя:
C-x h C-u M-| xmllint --format - RET
Эта программа поставляется с libxml2
. Вы также можете использовать tidy
. Вот список инструментов форматирования XML командной строки: /programming/16090869/how-to-pretty-print-xml-from-the-command-line
Вы также можете выполнить поиск и замену, а затем сделать отступ:
M-% > < RET > C-q C-j < RET ! C-M-\
Замечательный трюк: вы можете скопировать и вставить указанную выше строку в M-:
( eval-expression
) следующим образом:
(execute-kbd-macro (kbd "M-% > < RET > C-q C-j < RET ! C-M-\\"))
C-u
префикса.
Встроенный sgml-mode
имеет команду , чтобы сделать это: sgml-pretty-print
. Если вы внутри, nxml-mode
похоже, вам нужно переключиться на sgml-mode
первую. Вы можете написать команду для временного переключения в режим sgml, запустить pretty-print, а затем вернуться обратно в режим nxml.
Например, вот команда, которая будет красиво печатать регион, возможно с включенным автоматическим заполнением:
(defun xml-pretty-print (beg end &optional arg)
"Reformat the region between BEG and END.
With optional ARG, also auto-fill."
(interactive "*r\nP")
(let ((fill (or (bound-and-true-p auto-fill-function) -1)))
(sgml-mode)
(when arg (auto-fill-mode))
(sgml-pretty-print beg end)
(nxml-mode)
(auto-fill-mode fill)))
запишите это в свой ~/.emacs.d/init.el
:
(require 'sgml-mode)
(defun ninrod/reformat-xml ()
(interactive)
(save-excursion
(sgml-pretty-print (point-min) (point-max))
(indent-region (point-min) (point-max))))
перезагрузите emacs, а затем просто вызовите M-x reformat-xml
плохо отформатированный буфер xml.
источник: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/
Следуя подсказке ответа выше и предполагая, что вы tidy
установили вариант, может быть:
`C-x h M-| tidy -quiet -xml -utf8 -indent -`
Это откроет новый буфер *Shell Command Output*
вместо прямой замены содержимого буфера. После проверки результата замените старое содержимое новым:
C-x h M-insert-buffer
выберите предложенное значение по умолчанию, которое, вероятно, будет *Shell Command Output*
. Вы можете сохранить команду на потом с помощью макроса клавиатуры:
C-x ( C-x h M-| tidy -quiet -xml -utf8 -indent - C-x)
C-x C-k n pretty-xml
При этом вы можете выполнить, M-x pretty-xml
чтобы переформатировать буфер.