Старе питання "як скласти XML"


42

Я роблю зовсім небагато ручного редагування XML (вихідне визначення деякої генерації коду, який я роблю, - це власний формат XML) і, звичайно, вважаю за краще використовувати Emacs для будь-яких спеціальних цілей (зазвичай некрасивих) редакторів XML. Режим nXml відстоював мене в минулому, але я не можу зафіксувати його "контурну" підтримку. Різні публікації в Інтернеті та ТА фактично нічого не говорять - мені цікаво, чи має хто-небудь практичний досвід з окреслення / складання XML в Emacs (будь-який режим), чи потрібно це змінювати саму структуру XML.


Погляньте в перекриття.
Малабарба

Ось посилання на приклад , я зробив якийсь час назад справу з відкидним кодом для довільних тегів в режимі 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
typo:, nxmlніnmxl
Sean Allred

3
@SeanAllred: Я виправив помилку друку. Пастери будуть вдячні вам за улов!
Дан

Блискуче! Крім того, схоже, що буде легко писати спеціальні функції, hideshowяк сканування буфера, щоб перемикати всі екземпляри даного тегу тощо. Було б також непогано, якщо натискання на еліпсис мишею буде приховано, але я спробую не щоб занадто сильно голити яка :)
Марк Ауфлік

@MarkAufflick hideshow має підтримку миші, за замовчуванням shift + mouse 2 прив’язана до hs-mouse-toggle-сховання, яка повинна працювати точно так, як ви хочете.
Джордон Біондо

2
+1000. Ця відповідь врятувала мою розсудливість. Я люблю nxml-режим, але постійно перемикався між ним та спеціалізованим редактором XML лише для підтримки останнього тегів для складання тегів. Цікаво, хоча, чи вдасться реалізувати цю функціональність за допомогою тієї ж бібліотеки, що і dirtree.el , яка підтримує складання / розвертання за допомогою миші та малювання ліній структури дерева в GUI Emacsen?
dodgethesteamroller

12

веб-режим має вбудований та прив’язаний до складання елементів C-c C-f. Але ви втратите деякі функції використання nxml-режиму, очевидно.


Я не знав про web-режим (не роблю багато веб-розробників у ці дні). Я спробую це і звіту, дякую.
Марк Оффлік

1
Дуже близько! На жаль, веб-режим не дозволяє підкреслити імена тегів xml (які ми використовуємо). У коді веб-режиму розміщено сотні майже однакових рядків з твердим кодом. У мене була робота при розробці, яку слід змінити, але це тому, що виснажує! Інакше складання в веб-режимі дійсно працює :)
Позначте Оффліка

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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.