Wie verschönere / formatiere ich einen XML-Puffer?


Antworten:


24

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-\\"))

Eine nette Antwort, aber seien Sie vorsichtig, dass der Befehl, wie er jetzt geschrieben wurde, den Pufferinhalt durch die Ausgabe des Shell-Befehls ersetzt. Dies liegt am C-uPräfix.
FredrikHedman

3
Antwort bedeutet, dass Emacs das nicht kann.
Sergey Kostrukov

13

Der eingebaute in sgml-modehat 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)))

7

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-xmlden schlecht formatierten xml-puffer auf.

Quelle: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/


0

Wenn Sie dem Hinweis der obigen Antwort folgen und davon ausgehen, dass Sie tidyeine 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-xmlum den Puffer neu zu formatieren.


0

Markiere deine xml und mache:

M-x sgml-pretty-print

Oder führen Sie einfach den Befehl ohne markierten Bereich aus, um den gesamten Puffer zu verschönern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.