Відповіді:
Чи існує функціональність для переформатування цього буфера, щоб його можна було прочитати чимало користувачів?
Звичайно, і у вас є маса варіантів. Я б, мабуть, подав його до зовнішньої програми, використовуючи:
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, запустити симпатичний друк, а потім перейти в режим 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
переформатування буфера.