Come preimpostare / formattare un buffer XML?


Risposte:


24

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

Una bella risposta, ma attenzione che il comando come scritto ora sostituirà il contenuto del buffer con l'output del comando shell. Ciò è dovuto al C-uprefisso.
FredrikHedman,

3
Risposta significa che emacs non può farlo.
Sergey Kostrukov,

13

Il built-in sgml-modeha un comando per fare questo: sgml-pretty-print. Se ci sei nxml-mode, sembra che devi sgml-modeprima 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)))

7

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-xmlil buffer xml formattato in modo errato.

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


0

Seguendo il suggerimento della risposta precedente e supponendo di aver tidyinstallato 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-xmlper riformattare il buffer.


0

Segna il tuo xml e fai:

M-x sgml-pretty-print

O semplicemente eseguire il comando senza un'area contrassegnata per preimpostare l'intero buffer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.