Respuestas:
¿Ya existe la funcionalidad para reformatear este búfer para que el usuario pueda leerlo?
Por supuesto, y tienes muchas opciones. Probablemente lo alimentaría a un programa externo usando:
C-x h C-u M-| xmllint --format - RET
Este programa viene con libxml2
. También podrías usar tidy
. Aquí hay una lista de herramientas de formato xml de línea de comandos: /programming/16090869/how-to-pretty-print-xml-from-the-command-line
También puede hacer una búsqueda y reemplazar y luego sangrar:
M-% > < RET > C-q C-j < RET ! C-M-\
Truco ordenado: puede copiar y pegar la cadena anterior en M-:
( eval-expression
) de esta manera:
(execute-kbd-macro (kbd "M-% > < RET > C-q C-j < RET ! C-M-\\"))
C-u
prefijo.
El built-in sgml-mode
tiene un comando para hacer esto: sgml-pretty-print
. Si estás dentro nxml-mode
, parece que debes cambiar a sgml-mode
primero. Puede escribir un comando para cambiar temporalmente al modo sgml, ejecutar pretty-print y luego volver al modo nxml.
Por ejemplo, aquí hay un comando que imprimirá bastante la región, opcionalmente con autocompletar habilitado:
(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)))
escribe esto en tu ~/.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))))
vuelva a cargar emacs, luego solo llame M-x reformat-xml
al búfer xml mal formateado.
fuente: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/
Siguiendo la pista de la respuesta anterior, y suponiendo que haya tidy
instalado una variación podría ser:
`C-x h M-| tidy -quiet -xml -utf8 -indent -`
Esto abrirá un nuevo búfer en *Shell Command Output*
lugar de reemplazar directamente el contenido del búfer. Después de verificar el resultado, reemplace el contenido anterior por el nuevo con:
C-x h M-insert-buffer
elija el valor predeterminado sugerido que probablemente sea *Shell Command Output*
. Puede guardar el comando para más tarde con una macro de teclado:
C-x ( C-x h M-| tidy -quiet -xml -utf8 -indent - C-x)
C-x C-k n pretty-xml
Con esto puede ejecutar M-x pretty-xml
para formatear el búfer.