旧的“如何折叠XML”问题


42

我正在做大量手动XML编辑(我正在做的某些代码生成的源定义是自定义XML格式),并且当然更喜欢使用Emacs而不是任何特殊用途(通常是丑陋的)XML编辑器。过去,nXml模式使我保持良好状态,但是我对它的“概述”支持一无所知。各种Internet和SO帖子实际上没有说什么-我想知道是否有人在Emacs(任何模式)中概述/折叠XML有任何实践经验,是否需要更改XML结构本身。


显得光彩夺目。
马拉巴巴2014年

这是我以前处理过以nxml模式处理任意标签的折叠代码的示例的链接-也许它可以帮助您开发自己的代码: superuser.com/a/787030/206164 我处理的特定标签是xsl- -我合并了一个计数器来处理具有相同名称的嵌套标签。
法律列表

Answers:


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-mode的代码。

这将允许您使用来切换xml元素的隐藏/取消隐藏,C-ch并支持名称中的下划线。

在此处输入图片说明


2
错别字:nxml,不是nmxl
Sean Allred

3
@SeanAllred:我修正了错字。剪切和剪切将感谢您的收获!

辉煌!看起来似乎很容易编写自定义函数,hideshow例如扫描缓冲区以切换给定标签的所有实例等。如果用鼠标单击省略号也可以隐藏,这也很好,但我会尽量避免太多地
ve牛

@MarkAufflick hideshow具有鼠标支持,默认情况下,shift +鼠标2绑定到hs-mouse-toggle-hide,其工作方式与您希望的完全一样。
Jordon Biondo 2014年

2
+1000。这个答案节省了我的理智。我喜欢nxml-mode,但是一直在它和专用XML编辑器之间不断切换,仅用于后者的标签折叠支持。我想知道,是否有可能使用与dirtyree.el相同的库来实现此功能,该库支持在GUI Emacsen中使用鼠标进行折叠/展开以及树形结构的线条绘制?
dodgethesteamroller 2015年

12

web-mode具有内置的元素折叠并绑定到C-c C-f。但是您显然会失去使用nxml-mode的某些功能。


我不了解网络模式(这些天不要做太多的网络开发)。我会尝试一下并报告,谢谢。
Mark Aufflick 2014年

1
很近!不幸的是,Web模式不允许在xml标记名称(我们使用)中使用下划线。在整个Web模式代码中乱七八糟的是数百个几乎相同的硬编码正则表达式字符串。我在尝试修改它时遇到了麻烦,但这是因为筋疲力尽!否则,在网络模式下折叠确实有效:)
Mark Aufflick 2014年

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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.