Eski “XML nasıl katlanır” sorusu


42

Oldukça fazla el ile XML düzenleme yapıyorum (yaptığım kod kodunun kaynak tanımı özel bir XML formatıdır) ve elbette Emacs'ı herhangi bir özel amaçlı (genellikle çirkin) XML editörleri üzerinde kullanmayı tercih ederim. nXml modu geçmişte iyi durdu, ancak “taslak” desteği etrafında başımı alamıyorum. Çeşitli internet ve SO mesajları etkili bir şekilde hiçbir şey demiyor - XML ​​yapısının kendisinin değiştirilmesini gerektiren olsun veya olmasın Emacs'ta (herhangi bir modda) XML dışlamak / katlamak konusunda herhangi bir pratik deneyimi olup olmadığını merak ediyorum.


Güneş ışığına bak.
Malabarba

İşte nxml modunda keyfi etiketleri için kod katlama ile uğraşan bir süre geri yaptım bir örnek bağlantısıdır - belki de kendi kodunuzu geliştirmeye yardımcı olabilir: superuser.com/a/787030/206164 ben ele Özellikle etiket oldu xsl- - Aynı adda iç içe etiketlerle uğraşmak için bir sayaç kullandım.
kanun listesi

Yanıtlar:


39

Bu SO postasını buldum: 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)

Kodu nxml-mode için kolayca değiştirebilir.

Bu, xml öğelerinin gizlenmesini / gizlenmesini değiştirmenizi sağlar ve adlardaki C-chalt çizgi desteklenir.

görüntü tanımını buraya girin


2
yazım hatası:, nxmldeğilnmxl
Sean Allred

3
@SeanAllred: Yazım hatasını düzelttim. Kes ve çıkarlar, yakalandığın için sana teşekkür edecek!
Dan

Parlak! Ayrıca hideshow, belirli bir etiketin tüm örneklerini değiştirmek için bir arabellek taramak gibi özel işlevler yazmak için de kolay olacak gibi gözüküyor . Fare ile bir elipsin üzerine tıklandığında gizlenmeyecekse de iyi olurdu, ama denemeyeceğim :) çok fazla yak tıraş
Mark Aufflick

@MarkAufflick Hideshow, fare desteği vardır, varsayılan olarak, shift + fare 2, tam olarak istediğiniz gibi çalışması gereken, hs-fare-toggle-gizlemeye bağlıdır.
Jordon Biondo

2
1000. Bu cevap aklımı kurtardı. Nxml-modunu seviyorum ama sürekli olarak sadece etiketin katlanması için özel bir XML editörü arasında geçiş yapıyordum. Bununla birlikte, GUI Emacsen'deki ağaç yapısının fare ile katlanmasını ve çizgi çizilmesini destekleyen dirtree.el ile aynı kütüphaneyi kullanarak bu işlevselliği uygulamak mümkün olsa da acaba ?
dodgethesteamroller

12

web kipinde yerleşik ve buna bağlı katlama elemanı vardır C-c C-f. Ama açıkça nxml-mode kullanmanın bazı özelliklerini kaybedeceksiniz.


Web modu hakkında bilmiyordum (bu günlerde web dev pek yapmayın). Deneyeceğim ve rapor edeceğim, teşekkürler.
Mark Aufflick

1
Çok yakın! Maalesef web modu, xml etiket adlarında (kullandığımız) alt çizgi için izin vermez. Web modu kodu boyunca çevrelenmiş, yüzlerce yakın sabit kodlu regex dizgisidir. Çalışırken bıçaklanmam gerekti, ama değiştirilmesi gerekiyordu, çünkü çok yorucuydu! Aksi takdirde, web modunda katlama gerçekten işe yarıyor :)
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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.