回答:
このバッファーをユーザーが読み取り可能な形式に再フォーマットする機能は既に存在しますか?
もちろん、たくさんの選択肢があります。私はおそらくそれを使用して外部プログラムにそれを供給したいと思います:
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
プレフィックスが原因です。
組み込みに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
、バッファを再フォーマットするために実行できます。