cnu
그는 물었다 12년 전
80

예쁜 인쇄면이 Emacs 에서 XML 파일을

내가 사용하는 파일 시스템에 의해 생성된 xml 파일 (너스마르 모드) 과 emacs 편집하려는 내 don& # 39, 모든 예쁜 서식 태그 없다.

하지만 나는 예쁜 인쇄면이 검색 및 저장 파일 전체를 밀어맞춤 함께 wasn& t # 39, 자동 찾을 수 있을 것입니다.

방법이? Linux 에서 할 수 있는 일부 또는 이상의 편집기에는.

답변 15 개

39, 심지어 너회가 don& 고유한 함수를 작성할 필요가 없다 - sgml 모드 (gnu emacs 핵심 모듈) 가 내장현 예쁜 인쇄면이 함수 호출 (sgml 예쁜 인쇄하십시오..) 시작과 끝은 지역을 담당하는 인수만.

Xml 은 진실이며당신이 잘라내기와 붙여넣기 경우 임의의 위치 찾기 베고 털미널 줄을 사용할 수 있습니다. (http://curiousprogrammer.wordpress.com/2009/02/27/pretty-printing-xml/) 이 &lt, a href = &quot &quot &gt, 예쁜 printer&lt /a>;; 수정 줄바꿈할 줄 수 있는 것은 처음이다.

Alexandre Rademaker
그는 10년 전 댓글을 달았습니다
0

이 지역의 반군지역 함수은 인수로 실행하십시오 어떻게 합니까?

ScootyPuff
그는 10년 전 댓글을 달았습니다
1

(sgml 예쁜 인쇄하십시오. (지역 시작) (지역 끝))

daveloyall
그는 5년 전 댓글을 달았습니다
6

39 ',' m not sgml 모드 시간이 지남에 따라 변경된 i& 알 수 있습니다. 오늘, 나는 'c x 호출되었을 c f', '내' 와 '다음' m x 푸.1믈 m x sgml 모드 sgml 예쁜 인쇄하십시오. xml 파일을 attaboy 예쁜 인쇄되었습니다. (뭐, emacs 를 20 초 이상 완료되기 전에 교수형에 처해졌다. 예쁜 전송되었기 전에 파일 한 줄을 선 인쇄 및 720e 다음날이야)

daveloyall
그는 5년 전 댓글을 달았습니다
1

사실, 난 또 못하며창조된 'g' 를 선택할 수 있는 지역 전체 버퍼 c x 했다.

nroose
그는 2년 전 댓글을 달았습니다
3

39, t sgml 모드 전환하십시오 didn& 내가 할 정도다. 이는 m x 명령을 너스마르 모드!

Swedgin
그는 일 년 전 댓글을 달았습니다
0

Emacs, 내가 할 수 있는 모드 '를 사용하여 26.2 임상의들의 너스마르 c x sgml 예쁜 인쇄하십시오.' h '다음' m x 전체 버퍼. 이제 꽤 포맷됩니다 xml 될 것입니다.

예쁜 필요한 경우에만 유발하지 않으면서 새로운 행 구분, 들여쓰기, 전체 '명령' 이 있는 버퍼를 keystrokes 지역 들여쓰려면 적용할 수 있습니다.

C-x h
C-M-\

또한 행 구분 할 경우 소개하십시오 도왔으매 열고 닫는 주기표시 흐름선 서로 다른 기능을 사용할 수 있습니다 다음 엘리스프 아주 잘 쓴 벤햐민 페라리. I found it blogspot. 블로그 희망을 it& # 39 의 양호임 나에게 다시 발생시킬 수 있습니다.

(defun bf-pretty-print-xml-region (begin end)
  "Pretty format XML markup in region. You need to have nxml-mode
http://www.emacswiki.org/cgi-bin/wiki/NxmlMode installed to do
this.  The function inserts linebreaks to separate tags that have
nothing but whitespace between them.  It then indents the markup
by using nxml's indentation rules."
  (interactive "r")
  (save-excursion
      (nxml-mode)
      (goto-char begin)
      (while (search-forward-regexp "\>[ \\t]*\<" nil t) 
        (backward-char) (insert "\n"))
      (indent-region begin end))
    (message "Ah, much better!"))

39, t 이 같은 도구를 사용하는 개외부 doesn& 지닌다.

Christian Berg
Cheeso
그는 11년 전 댓글을 달았습니다
1

좋은 지펑, 감사합니다. 분리 (너스마르 모드) 위에서 예쁜 인쇄하십시오. 지펑 수 있게 하는 일을 sgml 모드 22.2.1 emacs 에 내장되어 있습니다. 하지만 난 수정을 할 수 있기 때문에 전체 버퍼 (지점임 분) (지점임 맥스야) # 39 의 that& 내 가장 일이다. 또한, 한 개의 버그: 각 줄 바꿈 삽입한 증분우선순위수준우선 종료 합니다.

Alexandre Rademaker
그는 9년 전 댓글을 달았습니다
0

Emacs 에서 이 기능을 사용하려면 어떻게 해야 합니까? 나는 이 함수는 코드의 붙여넣습니다 복사됨 및 스크래치 버퍼, 잘 하고. 이 기능을 호출하십시오 이제 어떻게 해야 합니까?

Christian Berg
그는 9년 전 댓글을 달았습니다
1

It 는 지펑 디바이스처럼 평가한 뒤 다른 기능을 호출할 수 있습니다. M x bf 예쁜 인쇄하십시오 xlm 지역. (Rec.601 don& # 39, 물론 이 모든 키를 사용하여 완료율을 입력할 수 없다. M x bf&lt tab>; 충분히 있어야 합니다.) # 39, 아마 don& 함수를 정의할 수 없다 할 때마다 때문에, 이 곳에서 넣어 사용할 수 있는 것은 로드되는지 ~ /.emacs.d/init.el 시작 시간 (예:

ceving
그는 8년 전 댓글을 달았습니다
1

어떻게 열거합니다 것에 대한 긴 속성?

TauPan
그는 4년 전 댓글을 달았습니다
0

이는 잘못된 정보 및 문자 인코딩 때문에 깔끔한 또 멋진 날 원하는 파일을 재적용됩니다 전에 청소하려면 구축한 것! 가끔 볼 수 있다는 점을 xml 파일 및 거부할 것이라고 도움말에서는 줄바꿈할 구조를 지닌다.

임의의 M 으로 - emacs 명령을 실행할 수 있습니다. 스마린트 경우 설치되어 있어야 합니다.

m - 스마린트 &quot &quot 형식 -;; 선택된 영역을 거역한다면 포맷하십시오

m - 스마린트 &quot c u &quot 형식 -;; 같은 지역 출력물에는 교체하십니까 함께 할 것이다

Tim Helmstedt
그는 10년 전 댓글을 달았습니다
0

아래 @bubak 스크립팅된 이. 감사합니다!

Harald
그는 3년 전 댓글을 달았습니다
0

버퍼 내용의 지역 전체를 사용하여 앞에 m x 마크 전체 버퍼) 으로 처리할 수 있습니다.

내가 사용하는 너스마르 모드 깔끔한 내가 원할 때 들여쓰려면 포맷하십시오 및 편집 및 XML 이나 HTML. 또한 오버클로킹된 Emacs 인터페이스입니다 호텔에 묵었다.

Jeff Trull
keiw
그는 7년 전 댓글을 달았습니다
0

2013년 말까지 티디스엘 버전: emacs 에서 실행할 경우 24 "'잘못된 유형이거나 인수: 20111222.1756 스트라이프, 모두 "'

Alf
그는 7년 전 댓글을 달았습니다
0

39 의 @keiw That& you& # 39 에 지금 있는 때문일 것이다, re 버퍼입니다 doesn& # 39, 파일 이름을 없다. 동일한 오류 및 거슬러 올라갈 수 있는 최소한이요 잡을라는데 it on my side

도입 후 인쇄면이 예쁜 줄 바꿈

M-x sgml-mode
M-x sgml-pretty-print

I made 위에 다음과 같은 팀 헬름슈테트 덕분에 st

(defun nxml-pretty-format ()
    (interactive)
    (save-excursion
        (shell-command-on-region (point-min) (point-max) "xmllint --format -" (buffer-name) t)
        (nxml-mode)
        (indent-region begin end)))

빠르고 쉽게 수행할 수 있습니다. 많은 감사합니디ᅡ

Sean Allred
John J. Camilleri
그는 7년 전 댓글을 달았습니다
2

Gnu Emacs 24, 그래서 이 오류가 내게 준 마지막 행은 변경할 수 있습니다. ' (지역 들여쓰려면 0 (카운트입니다 선 (지점임 분) (지점임 맥스야)))'

39 의 here& 벤햐민 Ferrari& # 39 의 버전, 내가 몇 tweak 했다.

  • 39 는 ',' t 대체하십시오 정규 표현식 검색 전달하십시오. didn& 종료 때문에 수술을 아니하였으매 처음부터 끝까지 그 지역을 버퍼 (대신 말 지역)

  • 이제 증분을 적절하게 체레소 '끝' '고 말했다.
  • it ',' /tag&gt &lt tag&gt &lt 분할합니다 죽이려하겠어요 삽입하십시오 사이에 있는,, 수정되므로 가치를 극대화할 수 있습니다. 그렇다, 엄밀히 말해 we& # 39, 여기서 끝이 아니라 시작 / re 값 수정 설명하였노라 빈 훨씬 더 클 것으로 보인다. 이제 조금 더 엄격히 검색하려는 그런 상황을 피하기 위한 두 개의 분리된 사용합니다.

39, t, 아직 이 &quot doesn& 개외부 tidy&quot 의존하고, 등. 그러나 '대한' 니코프 요구하는 cl '' 매크로.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; pretty print xml region
(defun pretty-print-xml-region (begin end)
  "Pretty format XML markup in region. You need to have nxml-mode
http://www.emacswiki.org/cgi-bin/wiki/NxmlMode installed to do
this.  The function inserts linebreaks to separate tags that have
nothing but whitespace between them.  It then indents the markup
by using nxml's indentation rules."
  (interactive "r")
  (save-excursion
    (nxml-mode)
    (goto-char begin)
    ;; split <foo><foo> or </foo><foo>, but not <foo></foo>
    (while (search-forward-regexp ">[ \t]*<[^/]" end t)
      (backward-char 2) (insert "\n") (incf end))
    ;; split <foo/></foo> and </foo></foo>
    (goto-char begin)
    (while (search-forward-regexp "<.*?/.*?>[ \t]*<" end t)
      (backward-char) (insert "\n") (incf end))
    (indent-region begin end nil)
    (normal-mode))
  (message "All indented!"))

한 가지 방법은 하고 있다. 혹시 아래에 있는 형식

<abc>     <abc><abc>   <abc></abc> </abc></abc>       </abc>

Emacs 에서 봅니다.

M-x nxml-mode
M-x replace-regexp RET  > *< RET >C-q C-j< RET 
C-M-\ to indent

이렇게 하면 위에서 아래로 들여쓰려면 xml 예제

<abc>
  <abc>
    <abc>
      <abc>
      </abc>
    </abc>
  </abc>
</abc>

Vim 에서 이를 확인할 수 있습니다

:set ft=xml
:%s/>\s*</>\r</g
ggVG=

ᄋ "이번 도움이 됩니다.

# 39, 제이슨 Viers& 내가 있었다. 버전 및 추가 로직을 동일팔레트에 xmlns 를 스스로 선언을 흐름선. 이 = 및 xmlns 를 xmlns 를 있다고 가정합니다. 정치 공백 없이.

(defun cheeso-pretty-print-xml-region (begin end)
  "Pretty format XML markup in region. You need to have nxml-mode
http://www.emacswiki.org/cgi-bin/wiki/NxmlMode installed to do
this.  The function inserts linebreaks to separate tags that have
nothing but whitespace between them.  It then indents the markup
by using nxml's indentation rules."
  (interactive "r")
  (save-excursion
    (nxml-mode)
    ;; split <foo><bar> or </foo><bar>, but not <foo></foo>
    (goto-char begin)
    (while (search-forward-regexp ">[ \t]*<[^/]" end t)
      (backward-char 2) (insert "\n") (incf end))
    ;; split <foo/></foo> and </foo></foo>
    (goto-char begin)
    (while (search-forward-regexp "<.*?/.*?>[ \t]*<" end t)
      (backward-char) (insert "\n") (incf end))
    ;; put xml namespace decls on newline
    (goto-char begin)
    (while (search-forward-regexp "\\(<\\([a-zA-Z][-:A-Za-z0-9]*\\)\\|['\"]\\) \\(xmlns[=:]\\)" end t)
      (goto-char (match-end 0))
      (backward-char 6) (insert "\n") (incf end))
    (indent-region begin end nil)
    (normal-mode))
  (message "All indented!"))

  1. Emacs 에서 일할 수 있지만, ll %s/dbase/ext_table. 너스마르 모드 포맷하십시오 you& # 39 분할하려면 선을 제시했다.
  2. 39, 단순히 더 큰 파일을 isn& 가치도 없다. 실행하십시오 스타일시트가 (작센 사용하는 것이 좋습니다.

    이럴 줄 들여쓰기도 얻을 수 있는 올바른 정보) 에 긴 파일 nice to get a pretty 인쇄하십시오. 유지할 수 있는 모든 요소를 공백

    39, & # 39 programlisting& 함께 자신의 이름을 추가. # 39, & # 39 프로그램목록 yourElementName& 같이.

하스

xml 버전을 = &quot &lt 1.0";;? 인코딩입니다 = &quot utf-8&quot >;;? xmlns 를, http://www.w3.org/1999/XSL/Transform&quot, xsl = &quot &lt, xsl: 스타일시트가. 버전 = &quot 1.0&quot >;; 출력 방법 = &quot xml&quot &lt, xsl:;; = &quot 들여쓰려면 yes"; 인코딩입니다 = &quot utf-8&quot />;; &lt xsl 스트립 공간 요소이면 = &quot *&quot />;;; &lt xsl 보존할지 공간 요소이면 = &quot programlisting&quot />;;;

  • @&quot &gt 해당되어서는 = &quot, 노드 (), xsl: 템플리트를 <; &lt xsl:copy>; 선택 = &quot @&quot /&gt xsl 적용하십시오 템플릿일 <;;; &lt xsl:apply-templates/>; &lt /xsl:copy>; &lt /xsl:template>;

&lt /xsl:stylesheet>;

2017년 기준으로 이미 이 기능을 사용하면 emacs 는 기본적으로 '~ 를 쓰지 않을 수 있지만, 이 작은 함수은 /.emacs.d/init.el':

(require 'sgml-mode)

(defun reformat-xml ()
  (interactive)
  (save-excursion
    (sgml-pretty-print (point-min) (point-max))
    (indent-region (point-min) (point-max))))

그럼 그냥 m x xml 재적용됩니다 '콜'

출처: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/

스페이스마치, 그냥 사용하는 경우, # 39, & # 39 명령을 사용하여 spacemacs/indent-region-or-buffer&.

M-x spacemacs/indent-region-or-buffer

      • [Xml-parse.el] 내가 사용하는 xml 태그 재적용됩니다 '에서' (http://www.emacswiki.org/emacs/xml-parse.el) *. 일반적으로 파일 시작 부분의 요점이지 할 수 있을 것이라고 이 명령을 실행할 때.

39 에 통합되어 흥미로운 it& 해당 파일이 [에마치피크] (http://emacspeak.sourceforge.net/). 내가 어렸을 때 아닌 '은 Emacs 에서 사용하는 에마치피크 잃고 생각해봤죠' xml 태그 재적용됩니다 내장. 이를 위해 내가 할 수 있었던 하루 정보기술 (it) 과 인터넷 검색 및 카타시안 손실됩니다 입력되었는지 위키 페이지 위에 언급한.

39 m, 내 코드 부착 i& xml 구문 분석 시작할 수 있다. 확신하지 못하고 있지만 Emacs 코드 조각을 태그일 경우 가장 일하고 싶은 날 것 같다.

(if (file-exists-p "~/.emacs.d/packages/xml-parse.el")
  (let ((load-path load-path))
    (add-to-list 'load-path "~/.emacs.d/packages")
    (require 'xml-parse))
)

깔끔한 looks like a good 모드. 이것좀봐 합니다. 이 경우 정말 필요한 모든 기능을 사용할 수 있습니다.

어쨌든, 이 문제는 나에게 잔소리를 일주일 정도 쉐퍼드도 wasn& # 39, t 검색: 비판을 받아왔다. 내가 찾은 후 시작한 검색 및 게시, ui_policytable_java_spe_policy 엘리스프 함수은 이 사이트를 통해 않는 아주 좋다고. 저자는 또 사용하여 제안됩니다 지닌다.

답변 주셔서 감사합니다, 마르셀 &lt strike> (내가 너무 나쁜 don& # 39 점, t 충분히 업모드 너회가) /strike&gt <;).

이에 대해 조만간 strike&gt <;; 내 blog.&lt /strike&gt 게시물로의 예정입니다. 이것은 게시물로의 그것에 대해 (수신기마다 https://partner. microsoft. Marcel& # 39 의 사이트).

39 m 두렵도 i&, 내가 좋아하는 벤햐민 페라리 버전 정말 좋군요. 항상 새로운 가치를 두고 내부 예쁜 인쇄하십시오 및끝 태그 내에 삽입, 원치 않는 CR 에 줄을 태그번호 값.