如何美化/格式化XML缓冲区?


Answers:


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-\\"))

一个很好的答案,但请注意,现在编写的命令将用shell命令的输出替换缓冲区内容。这是因为有C-u前缀。
FredrikHedman'3

3
回答意味着emacs无法做到。
谢尔盖·科斯特鲁科夫

13

内置sgml-mode命令可以执行此操作:sgml-pretty-print。如果您在其中,nxml-mode则似乎需要先切换到sgml-mode。您可以编写命令以临时切换到sgml-mode,运行pretty-print,然后再切换回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

或者只运行不带标记区域的命令以修饰整个缓冲区。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.