วิธีการ prettify / จัดรูปแบบบัฟเฟอร์ XML?


17

ฉันมีไฟล์ที่มี xml ทั้งหมดอยู่ในบรรทัดเดียว มีฟังก์ชั่นที่มีอยู่แล้วในการจัดรูปแบบบัฟเฟอร์นี้ใหม่เพื่อให้ผู้ใช้อ่านได้หรือไม่?


4
FWIW คำถามนี้ถูกถามใน stackoverflow: stackoverflow.com/questions/12492/…
YoungFrog

คำตอบ:


24

มีฟังก์ชั่นที่มีอยู่แล้วในการจัดรูปแบบบัฟเฟอร์นี้ใหม่เพื่อให้ผู้ใช้อ่านได้หรือไม่?

แน่นอนและคุณมีตัวเลือกมากมาย ฉันอาจจะให้อาหารกับโปรแกรมภายนอกโดยใช้:

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

libxml2โปรแกรมนี้มาพร้อมกับ tidyนอกจากนี้คุณยังสามารถใช้ นี่คือรายการเครื่องมือการจัดรูปแบบ xml ของ commandline: /programming/16090869/how-to-pretty-print-xml-from-the-command-line

คุณสามารถทำการค้นหาและแทนที่แล้วเยื้อง:

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

เคล็ดลับเรียบร้อย: คุณสามารถคัดลอกและวางสตริงด้านบนลงในM-:( eval-expression) ดังนี้:

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

คำตอบที่ดี แต่ระวังว่าคำสั่งตามที่เขียนตอนนี้จะแทนที่เนื้อหาบัฟเฟอร์ด้วยผลลัพธ์จากคำสั่งเชลล์ นี่เป็นเพราะC-uคำนำหน้า
FredrikHedman

3
คำตอบหมายถึง emacs ไม่สามารถทำได้
Sergey Kostrukov

13

ในตัวมีคำสั่งการทำเช่นนี้:sgml-mode sgml-pretty-printหากคุณอยู่ในnxml-modeดูเหมือนว่าคุณต้องเปลี่ยนไปsgml-modeก่อน คุณสามารถเขียนคำสั่งเพื่อสลับไปยังโหมด sgml ชั่วคราวเรียกใช้ pretty-print จากนั้นสลับกลับไปที่โหมด nxml

ตัวอย่างเช่นต่อไปนี้เป็นคำสั่งที่จะพิมพ์พื้นที่ให้เลือกที่เปิดใช้งานการป้อนอัตโนมัติ:

(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

เขียนสิ่งนี้เป็นของคุณ~/.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))))

โหลด emacs ใหม่จากนั้นเพียงเรียกM-x reformat-xmlใช้บัฟเฟอร์ xml ที่จัดรูปแบบไม่ดี

แหล่งที่มา: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/


0

ทำตามคำแนะนำของคำตอบข้างต้นและสมมติว่าคุณได้tidyติดตั้งชุดรูปแบบอาจจะ:

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

สิ่งนี้จะเปิดบัฟเฟอร์ใหม่*Shell Command Output*แทนการแทนที่เนื้อหาของบัฟเฟอร์โดยตรง หลังจากตรวจสอบผลลัพธ์แล้วให้แทนที่เนื้อหาเก่าด้วยเนื้อหาใหม่ด้วย:

C-x h M-insert-buffer

*Shell Command Output*เลือกค่าเริ่มต้นปัญหาซึ่งอาจจะเป็น คุณสามารถบันทึกคำสั่งไว้ใช้ภายหลังด้วยมาโครคีย์บอร์ด:

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

ด้วยวิธีนี้คุณสามารถดำเนินM-x pretty-xmlการฟอร์แมตบัฟเฟอร์


0

ทำเครื่องหมาย xml ของคุณและทำ:

M-x sgml-pretty-print

หรือเพียงแค่เรียกใช้คำสั่งโดยไม่มีภูมิภาคที่ทำเครื่องหมายไว้เพื่อให้บัฟเฟอร์ทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.