Odpowiedzi:
Czy funkcjonalność już istnieje, aby sformatować ten bufor tak, aby był nieco czytelny dla użytkownika?
Oczywiście i masz wiele opcji. Prawdopodobnie podałbym go do zewnętrznego programu za pomocą:
C-x h C-u M-| xmllint --format - RET
Ten program pochodzi z libxml2
. Możesz także użyć tidy
. Oto lista narzędzi do formatowania XML wiersza poleceń: /programming/16090869/how-to-pretty-print-xml-from-the-command-line
Możesz także wyszukać i zastąpić, a następnie wciąć:
M-% > < RET > C-q C-j < RET ! C-M-\
Zgrabna sztuczka: możesz skopiować i wkleić powyższy ciąg do M-:
( eval-expression
) w następujący sposób:
(execute-kbd-macro (kbd "M-% > < RET > C-q C-j < RET ! C-M-\\"))
C-u
przedrostka.
Wbudowany sgml-mode
ma polecenie, aby to zrobić: sgml-pretty-print
. Jeśli jesteś w nxml-mode
środku, wygląda na to, że musisz przełączyć na sgml-mode
pierwszy. Możesz napisać polecenie, aby tymczasowo przełączyć się do trybu sgml, uruchomić ładny wydruk, a następnie wrócić z powrotem do trybu nxml.
Na przykład, oto polecenie, które wydrukuje region całkiem ładnie, opcjonalnie z włączonym automatycznym wypełnianiem:
(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)))
napisz to w swoim ~/.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))))
przeładuj emacsa, a następnie po prostu zadzwoń M-x reformat-xml
źle sformatowany bufor xml.
źródło: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/
Postępując zgodnie z podaną wyżej odpowiedzią i zakładając, że tidy
zainstalowałeś wersję, może to być:
`C-x h M-| tidy -quiet -xml -utf8 -indent -`
Spowoduje to otwarcie nowego bufora *Shell Command Output*
zamiast bezpośredniej zamiany zawartości bufora. Po sprawdzeniu wyniku zamień starą zawartość na nową na:
C-x h M-insert-buffer
wybierz sugerowaną wartość domyślną, która prawdopodobnie będzie *Shell Command Output*
. Możesz zapisać polecenie na później za pomocą makra klawiatury:
C-x ( C-x h M-| tidy -quiet -xml -utf8 -indent - C-x)
C-x C-k n pretty-xml
Dzięki temu możesz wykonać, M-x pretty-xml
aby sformatować bufor.