XMLバッファーをprettify / formatする方法?


回答:


24

このバッファーをユーザーが読み取り可能な形式に再フォーマットする機能は既に存在しますか?

もちろん、たくさんの選択肢があります。私はおそらくそれを使用して外部プログラムにそれを供給したいと思います:

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

このプログラムにはが付属していlibxml2ます。を使用することもできますtidy。コマンドラインxmlフォーマットツールのリストを次に示します。https : //stackoverflow.com/questions/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ではできないことを意味します。
セルゲイ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.