Antworten:
Ist die Funktionalität bereits vorhanden, um diesen Puffer so zu formatieren, dass er vom Benutzer gelesen werden kann?
Natürlich, und Sie haben viele Möglichkeiten. Ich würde es wahrscheinlich an ein externes Programm weiterleiten mit:
C-x h C-u M-| xmllint --format - RET
Dieses Programm kommt mit libxml2
. Sie könnten auch verwenden tidy
. Hier ist eine Liste der XML-Formatierungstools für die Befehlszeile: /programming/16090869/how-to-pretty-print-xml-from-the-command-line
Sie können auch suchen und ersetzen und dann einrücken:
M-% > < RET > C-q C-j < RET ! C-M-\
Ordentlicher Trick: Sie können den obigen String wie folgt in M-:
( eval-expression
) kopieren und einfügen :
(execute-kbd-macro (kbd "M-% > < RET > C-q C-j < RET ! C-M-\\"))
C-u
Präfix.
Der eingebaute in sgml-mode
hat einen Befehl , dies zu tun: sgml-pretty-print
. Wenn Sie dabei sind nxml-mode
, müssen Sie zunächst auf wechseln sgml-mode
. Sie können einen Befehl schreiben, um vorübergehend in den sgml-Modus zu wechseln, pretty-print auszuführen und dann zurück in den nxml-Modus zu wechseln.
Hier ist zum Beispiel ein Befehl, mit dem die Region hübsch gedruckt wird, optional mit aktivierter automatischer Füllung:
(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)))
schreib das in dein ~/.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))))
lade emacs neu und rufe dann einfach M-x reformat-xml
den schlecht formatierten xml-puffer auf.
Quelle: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/
Wenn Sie dem Hinweis der obigen Antwort folgen und davon ausgehen, dass Sie tidy
eine Variante installiert haben , könnte dies sein:
`C-x h M-| tidy -quiet -xml -utf8 -indent -`
Dadurch wird ein neuer Puffer geöffnet, *Shell Command Output*
anstatt den Inhalt des Puffers direkt zu ersetzen. Ersetzen Sie nach Überprüfung des Ergebnisses den alten Inhalt durch den neuen durch:
C-x h M-insert-buffer
Wählen Sie die vorgeschlagene Standardeinstellung, die wahrscheinlich sein wird *Shell Command Output*
. Sie können den Befehl für später mit einem Tastaturmakro speichern:
C-x ( C-x h M-| tidy -quiet -xml -utf8 -indent - C-x)
C-x C-k n pretty-xml
Damit können Sie ausführen, M-x pretty-xml
um den Puffer neu zu formatieren.