XML 버퍼를 prettify / format하는 방법은 무엇입니까?


답변:


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접두사 때문입니다 .
FredrikHedman

3
답은 이맥스가 할 수 없다는 것을 의미합니다.
Sergey Kostrukov

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

또는 표시된 영역없이 명령을 실행하여 전체 버퍼를 미리 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.