คำถาม“ วิธีพับ XML” แบบเก่า


42

ฉันกำลังทำการแก้ไข XML ด้วยตนเองเล็กน้อย (คำจำกัดความแหล่งที่มาของการสร้างรหัสบางอย่างที่ฉันทำคือรูปแบบ XML ที่กำหนดเอง) และแน่นอนว่าต้องการใช้ Emacs เหนือวัตถุประสงค์พิเศษใด ๆ (มักจะน่าเกลียด) บรรณาธิการ XML โหมด nXml ช่วยให้ฉันยืนหยัดได้ดีในอดีต แต่ฉันไม่สามารถเข้าใจการสนับสนุน "เค้าร่าง" ได้ โพสต์อินเทอร์เน็ตและโพสต์ต่าง ๆ ไม่พูดอะไรได้อย่างมีประสิทธิภาพ - ฉันสงสัยว่าใครมีประสบการณ์เชิงปฏิบัติกับการสรุป / การพับ XML ใน Emacs (โหมดใดก็ได้) ไม่ว่าจะต้องมีการเปลี่ยนแปลงโครงสร้าง XML เองหรือไม่


มองเข้าไปในความสดใส
Malabarba

นี่คือลิงค์ไปยังตัวอย่างที่ฉันทำในขณะที่จัดการกับรหัสพับสำหรับแท็กโดยพลการในโหมด nxml - บางทีมันอาจช่วยให้คุณพัฒนารหัสของคุณเอง: superuser.com/a/787030/206164 แท็กเฉพาะที่ฉันจัดการคือxsl- - ฉันรวมตัวนับเพื่อจัดการกับแท็กที่ซ้อนกันด้วยชื่อเดียวกัน
กฎหมาย

คำตอบ:


39

ฉันพบโพสต์ดังนั้น: https://stackoverflow.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 ได้อย่างง่ายดาย

สิ่งนี้จะช่วยให้คุณสามารถสลับการซ่อน / การซ่อนองค์ประกอบ xml ด้วยC-chและจะสนับสนุนขีดล่างในชื่อ

ป้อนคำอธิบายรูปภาพที่นี่


2
ประเภท: nxmlไม่ใช่nmxl
Sean Allred

3
@SeanAllred: ฉันแก้ไขพิมพ์ผิด การตัดและ paster จะขอบคุณสำหรับการจับ!
แดน

ยอดเยี่ยม! มันก็ดูเหมือนว่ามันจะง่ายต่อการเขียนฟังก์ชั่นที่กำหนดเองhideshowเช่นการสแกนบัฟเฟอร์เพื่อสลับทุกอินสแตนซ์ของแท็กที่กำหนด ฯลฯ จะดีถ้าคลิกที่จุดไข่ปลาด้วยเมาส์จะยกเลิกการซ่อน แต่ฉันจะพยายามไม่ เพื่อโกนหนวดแยกมากเกินไป :)
Mark Aufflick

@MarkAufflick hideshow มีการรองรับเมาส์ตามค่าเริ่มต้น shift + mouse 2 ถูกผูกไว้กับ hs-mouse-toggle-hiding ซึ่งควรทำงานเหมือนกับที่คุณต้องการ
Jordon Biondo

2
1000 คำตอบนี้ช่วยให้สติของฉันดีขึ้น ฉันชอบโหมด nxml แต่สลับอย่างต่อเนื่องระหว่างมันกับโปรแกรมแก้ไข XML เฉพาะสำหรับการสนับสนุนการพับแท็ก ฉันสงสัยว่าถ้าเป็นไปได้ที่จะใช้ฟังก์ชั่นนี้โดยใช้ห้องสมุดเดียวกับdirtree.elซึ่งรองรับการพับ / แฉด้วยเมาส์และการวาดเส้นของโครงสร้างต้นไม้ใน GUI Emacsen?
dodgethesteamroller

12

เว็บโหมดC-c C-fได้พับองค์ประกอบที่สร้างขึ้นในและผูกไว้กับ แต่คุณจะสูญเสียคุณสมบัติบางอย่างของการใช้โหมด nxml อย่างเห็นได้ชัด


ฉันไม่ทราบเกี่ยวกับโหมดเว็บ (ไม่ได้ทำเว็บ dev มากในวันนี้) ฉันจะลองและรายงานกลับมาขอบคุณ
Mark Aufflick

1
เฉียดฉิว! น่าเสียดายที่โหมดเว็บไม่อนุญาตให้ขีดล่างในชื่อแท็ก xml (ซึ่งเราใช้) เกลื่อนกลาดไปทั่วรหัสโหมดเว็บคือหลายร้อยสตริง regex ของรหัสที่ใกล้เคียงกัน ฉันต้องแทงที่ออกกำลังกายซึ่งควรแก้ไข แต่เพราะเหนื่อย! มิฉะนั้นพับในเว็บโหมดการทำงานไม่แน่นอน :)
มาร์ค 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.