XML बफ़र को प्रीटेट / फॉर्मेट कैसे करें?


17

मेरे पास एक लाइन पर xml के साथ एक फाइल है। क्या कार्यक्षमता पहले से ही इस बफ़र को पुन: स्वरूपित करने के लिए मौजूद है कुछ हद तक उपयोगकर्ता-पठनीय है?


4
FWIW से यह सवाल पूछा गया stackoverflow पर: stackoverflow.com/questions/12492/…
यंगफ्रॉग

जवाबों:


24

क्या कार्यक्षमता पहले से ही इस बफ़र को पुन: स्वरूपित करने के लिए मौजूद है कुछ हद तक उपयोगकर्ता-पठनीय है?

बेशक, और आपके पास बहुत सारे विकल्प हैं। मैं शायद इसे किसी बाहरी कार्यक्रम का उपयोग करके खिलाऊंगा:

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

इस कार्यक्रम के साथ आता है libxml2। आप भी इस्तेमाल कर सकते हैं tidy। यहाँ कमांडलाइन xml फ़ॉर्मेटिंग टूल की सूची दी गई है: /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उपसर्ग के कारण है।
फ्रेड्रिकहेडमैन

3
उत्तर का मतलब है कि emacs ऐसा नहीं कर सकते।
सेर्गेई कोस्त्रुकोव

13

अंतर्निहित sgml-modeयह करने के लिए एक कमांड है sgml-pretty-print:। यदि आप इसमें हैं तो nxml-modeऐसा लगता है कि आपको sgml-modeपहले स्विच की आवश्यकता है । आप अस्थायी रूप से sgml-mode पर स्विच करने के लिए एक कमांड लिख सकते हैं, सुंदर-प्रिंट चला सकते हैं, फिर nxml-mode पर वापस आ सकते हैं।

उदाहरण के लिए, यहां एक कमांड है जो इस क्षेत्र को सुंदर रूप से प्रिंट करेगा, वैकल्पिक रूप से ऑटो-फिल सक्षम के साथ:

(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

या पूरे बफ़र को प्रीफेक्ट करने के लिए बिना चिह्नित क्षेत्र के केवल कमांड चलाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.