오래된 "XML을 접는 방법"질문


42

나는 약간의 수동 XML 편집 (내가하고있는 일부 코드 생성의 소스 정의는 사용자 정의 XML 형식 임)을하고 있으며 물론 특별한 목적 (일반적으로 못생긴) XML 편집기보다 Emacs를 사용하는 것을 선호합니다. nXml 모드는 과거에 잘 서 있었지만, "개요"지원을 둘러 볼 수 없었습니다. 다양한 인터넷 및 SO 게시물이 효과적으로 아무 말도하지 않습니다-XML 구조 자체를 변경 해야하는지 여부에 관계없이 누구나 Emacs (모든 모드)에서 XML을 요약 / 접는 경험이 있는지 궁금합니다.


눈을. 다.
Malabarba

여기에 내가 nxml 모드에서 임의의 태그에 대한 코드를 접는 다루는 동안 다시 한 예에 대한 링크입니다 - 아마도 그것은 당신이 당신의 자신의 코드를 개발하는 데 도움이 수는 : superuser.com/a/787030/206164 내가 달려 드는 특정 태그가 있었다 xsl- -이름이 같은 중첩 태그를 처리하기 위해 카운터를 통합했습니다.
lawlist

답변:


39

나는이 SO 게시물을 발견했다 : https : //.com/questions/944614/emacs-does-hideshow-work-with-xml-mode-sgml-mode

(require 'hideshow)
(require 'sgml-mode)
(require 'nxml-mode)

(add-to-list 'hs-special-modes-alist
             '(nxml-mode
               "<!--\\|<[^/>]*[^/]>"
               "-->\\|</[^/>]*[^/]>"

               "<!--"
               sgml-skip-tag-forward
               nil))



(add-hook 'nxml-mode-hook 'hs-minor-mode)

;; optional key bindings, easier than hs defaults
(define-key nxml-mode-map (kbd "C-c h") 'hs-toggle-hiding)

nxml-mode에 대해 약간 수정 된 코드를 쉽게 사용할 수 있습니다.

이를 통해 xml 요소의 숨기기 / 숨김 해제를 토글 C-ch하고 이름에서 밑줄을 지원할 수 있습니다.

여기에 이미지 설명을 입력하십시오


2
오타 : nxml, notnmxl
Sean Allred

3
@SeanAllred : 오타를 수정했습니다. 잘라 내기 및 붙여 넣기 도구를 사용해 주셔서 감사합니다.
Dan

훌륭한! 또한 hideshow주어진 태그의 모든 인스턴스를 토글하기 위해 버퍼를 스캔하는 것과 같은 사용자 정의 함수를 작성하는 것이 쉬운 것처럼 보입니다 . 마우스로 줄임표를 클릭하면 숨기기가 해제되지만 좋을 것입니다. 야크를 너무 많이 면도 :)
Mark Aufflick

@MarkAufflick hideshow는 마우스를 지원합니다. 기본적으로 shift + mouse 2는 hs-mouse-toggle-hiding에 바인딩되어 있으므로 원하는대로 정확하게 작동합니다.
Jordon Biondo

2
+1000 이 답변은 나의 정신을 구했습니다. 나는 nxml 모드를 좋아하지만 후자의 태그 폴딩 지원을 위해 전용 XML 편집기와 계속 전환하고있었습니다. 그래도 GUI Emacsen에서 마우스로 접기 / 펼치기 및 트리 구조의 선 그리기를 지원하는 dirtree.el 과 동일한 라이브러리를 사용하여이 기능을 구현할 수 있는지 궁금 합니다.
dodgethesteamroller

12

웹 모드 에는 내장 된 요소 접힘이 C-c C-f있습니다. 그러나 nxml-mode를 사용하는 기능 중 일부는 분명히 손실됩니다.


나는 웹 모드에 대해 몰랐다 (요즘에는 웹 개발을 많이하지 마십시오). 시도해보고 다시 감사하겠습니다.
Mark Aufflick 10

1
너무 가까이! 불행히도 웹 모드는 xml 태그 이름 (우리가 사용하는)에서 밑줄을 허용하지 않습니다. 웹 모드 코드 전체에 수백 개의 하드 코딩 된 정규식 문자열이 있습니다. 나는 운동해야 할 찌르는 것이 있었지만 고쳐야하기 때문에 수정해야합니다! 그렇지 않으면, 웹 모드에서 접기가 실제로 작동합니다 :)
Mark Aufflick

0
(add-to-list
 'hs-special-modes-alist
 '(nxml-mode
   "<!--\\|<[^/>][^>]*>" "-->\\|</[^/>]+>" "<!--" #'nxml-forward-element nil))
(add-hook 'nxml-mode-hook #'hs-minor-mode)
;; (setcdr (assoc 'nxml-mode hs-special-modes-alist) (list "<!--\\|<[^/>][^>]*>" "-->\\|</[^/>]+>" "<!--" #'nxml-forward-element nil))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.