Старе питання "як скласти 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.