Risposte:
Esiste già la funzionalità per riformattare questo buffer in modo che sia in qualche modo leggibile dall'utente?
Certo, e hai molte opzioni. Probabilmente lo darei ad un programma esterno usando:
C-x h C-u M-| xmllint --format - RET
Questo programma viene fornito con libxml2
. Puoi anche usare tidy
. Ecco un elenco di strumenti di formattazione xml a riga di comando: /programming/16090869/how-to-pretty-print-xml-from-the-command-line
Puoi anche fare una ricerca e sostituire e quindi rientrare:
M-% > < RET > C-q C-j < RET ! C-M-\
Trucco pulito: puoi copiare e incollare la stringa sopra in M-:
( eval-expression
) in questo modo:
(execute-kbd-macro (kbd "M-% > < RET > C-q C-j < RET ! C-M-\\"))
C-u
prefisso.
Il built-in sgml-mode
ha un comando per fare questo: sgml-pretty-print
. Se ci sei nxml-mode
, sembra che devi sgml-mode
prima passare . È possibile scrivere un comando per passare temporaneamente alla modalità sgml, eseguire pretty-print, quindi tornare alla modalità nxml.
Ad esempio, ecco un comando che stamperà piuttosto l'area, facoltativamente con il riempimento automatico abilitato:
(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)))
scrivi questo nel tuo ~/.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))))
ricaricare emacs, quindi basta richiamare M-x reformat-xml
il buffer xml formattato in modo errato.
fonte: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/
Seguendo il suggerimento della risposta precedente e supponendo di aver tidy
installato una variante potrebbe essere:
`C-x h M-| tidy -quiet -xml -utf8 -indent -`
Questo aprirà un nuovo buffer *Shell Command Output*
invece di sostituire direttamente il contenuto del buffer. Dopo aver verificato il risultato, sostituire i vecchi contenuti con i nuovi con:
C-x h M-insert-buffer
scegli il valore predefinito suggerito che probabilmente sarà *Shell Command Output*
. È possibile salvare il comando per dopo con una macro di tastiera:
C-x ( C-x h M-| tidy -quiet -xml -utf8 -indent - C-x)
C-x C-k n pretty-xml
Con questo è possibile eseguire M-x pretty-xml
per riformattare il buffer.