Làm cách nào để chỉnh sửa / định dạng bộ đệm XML?


Câu trả lời:


24

Liệu các chức năng đã tồn tại để định dạng lại bộ đệm này để người dùng có thể đọc được?

Tất nhiên, và bạn có rất nhiều lựa chọn. Tôi có thể cung cấp nó cho một chương trình bên ngoài bằng cách sử dụng:

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

Chương trình này đi kèm libxml2. Bạn cũng có thể sử dụng tidy. Dưới đây là danh sách các công cụ định dạng xml dòng lệnh: /programming/16090869/how-to-pretty-print-xml-from-the-command-line

Bạn cũng có thể thực hiện tìm kiếm và thay thế và sau đó thụt lề:

M-% > < RET > C-q C-j < RET ! C-M-\

Thủ thuật gọn gàng: bạn có thể sao chép và dán chuỗi trên vào M-:( eval-expression) như thế này:

(execute-kbd-macro (kbd "M-% > < RET > C-q C-j < RET ! C-M-\\"))

Một câu trả lời hay, nhưng hãy cảnh giác rằng lệnh như được viết bây giờ sẽ thay thế nội dung bộ đệm bằng đầu ra từ lệnh shell. Điều này là do C-utiền tố.
FredrikHedman

3
Trả lời có nghĩa là emacs không thể làm điều đó.
Sergey Kostrukov

13

Tích hợp sẵn sgml-modecó một lệnh để làm điều này : sgml-pretty-print. Nếu bạn đang ở trong nxml-modeđó, có vẻ như bạn cần chuyển sang sgml-modeđầu tiên. Bạn có thể viết một lệnh để tạm thời chuyển sang chế độ sgml, chạy bản in đẹp, sau đó chuyển về chế độ nxml.

Ví dụ, đây là một lệnh sẽ in đẹp khu vực, tùy chọn có bật tự động điền:

(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

viết cái này vào ~/.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))))

tải lại emacs, sau đó chỉ cần gọi M-x reformat-xmlvào bộ đệm xml được định dạng sai.

nguồn: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/


0

Theo gợi ý của câu trả lời ở trên và giả sử bạn đã tidycài đặt một biến thể có thể là:

`C-x h M-| tidy -quiet -xml -utf8 -indent -`

Điều này sẽ mở một bộ đệm mới *Shell Command Output*thay vì trực tiếp thay thế nội dung của bộ đệm. Sau khi kiểm tra kết quả, thay thế nội dung cũ bằng nội dung mới bằng:

C-x h M-insert-buffer

chọn mặc định đề xuất có thể sẽ được *Shell Command Output*. Bạn có thể lưu lệnh để sử dụng sau này bằng macro bàn phím:

C-x ( C-x h M-| tidy -quiet -xml -utf8 -indent - C-x)
C-x C-k n pretty-xml

Với điều này, bạn có thể thực hiện M-x pretty-xmlđể định dạng lại bộ đệm.


0

Đánh dấu xml của bạn và làm:

M-x sgml-pretty-print

Hoặc chỉ chạy lệnh mà không có vùng được đánh dấu để làm đẹp toàn bộ bộ đệm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.