Bagaimana cara membuat / memformat buffer XML?


Jawaban:


24

Apakah fungsionalitas sudah ada untuk memformat ulang buffer ini agar terbaca oleh pengguna?

Tentu saja, dan Anda punya banyak pilihan. Saya mungkin akan memasukkannya ke program eksternal menggunakan:

C-x h C-u M-| xmllint --format - RET

Program ini dilengkapi dengan libxml2. Anda juga bisa menggunakannya tidy. Berikut daftar alat pemformatan xml commandline: /programming/16090869/how-to-pretty-print-xml-from-the-command-line

Anda juga bisa melakukan pencarian dan ganti lalu indentasi:

M-% > < RET > C-q C-j < RET ! C-M-\

Trik rapi: Anda dapat menyalin dan menempelkan string di atas ke M-:( eval-expression) seperti ini:

(execute-kbd-macro (kbd "M-% > < RET > C-q C-j < RET ! C-M-\\"))

Jawaban yang bagus, tetapi berhati-hatilah karena perintah seperti yang ditulis sekarang akan menggantikan konten buffer dengan output dari perintah shell. Ini karena C-uawalan.
Fredrik Husman

3
Jawaban berarti emacs tidak dapat melakukannya.
Sergey Kostrukov

13

Built-in yang sgml-modememiliki perintah untuk melakukan hal ini: sgml-pretty-print. Jika Anda berada di nxml-modedalamnya sepertinya Anda perlu beralih ke yang sgml-modepertama. Anda bisa menulis perintah untuk sementara beralih ke mode sgml, menjalankan pretty-print, lalu beralih kembali ke mode nxml.

Sebagai contoh, berikut adalah perintah yang akan cukup mencetak wilayah, opsional dengan pengisian otomatis diaktifkan:

(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

tulis ini ke Anda ~/.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))))

muat ulang emacs, lalu panggil M-x reformat-xmlbuffer xml yang diformat dengan buruk.

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


0

Mengikuti petunjuk dari jawaban di atas, dan dengan asumsi Anda telah tidymenginstal variasi dapat menjadi:

`C-x h M-| tidy -quiet -xml -utf8 -indent -`

Ini akan membuka buffer baru *Shell Command Output*alih-alih secara langsung mengganti konten buffer. Setelah memeriksa hasilnya, ganti konten lama dengan yang baru dengan:

C-x h M-insert-buffer

pilih default yang disarankan yang mungkin akan menjadi *Shell Command Output*. Anda dapat menyimpan perintah untuk nanti dengan keyboard makro:

C-x ( C-x h M-| tidy -quiet -xml -utf8 -indent - C-x)
C-x C-k n pretty-xml

Dengan ini, Anda dapat menjalankan M-x pretty-xmluntuk memformat ulang buffer.


0

Tandai xml Anda dan lakukan:

M-x sgml-pretty-print

Atau jalankan saja perintah tanpa daerah yang ditandai untuk membasahi seluruh buffer.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.