ฉันมีไฟล์ที่มี xml ทั้งหมดอยู่ในบรรทัดเดียว มีฟังก์ชั่นที่มีอยู่แล้วในการจัดรูปแบบบัฟเฟอร์นี้ใหม่เพื่อให้ผู้ใช้อ่านได้หรือไม่?
ฉันมีไฟล์ที่มี xml ทั้งหมดอยู่ในบรรทัดเดียว มีฟังก์ชั่นที่มีอยู่แล้วในการจัดรูปแบบบัฟเฟอร์นี้ใหม่เพื่อให้ผู้ใช้อ่านได้หรือไม่?
คำตอบ:
มีฟังก์ชั่นที่มีอยู่แล้วในการจัดรูปแบบบัฟเฟอร์นี้ใหม่เพื่อให้ผู้ใช้อ่านได้หรือไม่?
แน่นอนและคุณมีตัวเลือกมากมาย ฉันอาจจะให้อาหารกับโปรแกรมภายนอกโดยใช้:
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
คำนำหน้า
ในตัวมีคำสั่งการทำเช่นนี้: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)))
เขียนสิ่งนี้เป็นของคุณ~/.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/
ทำตามคำแนะนำของคำตอบข้างต้นและสมมติว่าคุณได้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
การฟอร์แมตบัฟเฟอร์
ทำเครื่องหมาย xml ของคุณและทำ:
M-x sgml-pretty-print
หรือเพียงแค่เรียกใช้คำสั่งโดยไม่มีภูมิภาคที่ทำเครื่องหมายไว้เพื่อให้บัฟเฟอร์ทั้งหมด