古い「XMLの折り方」の質問


42

私はかなりの量の手動XML編集を行っており(私が行っているコード生成のソース定義はカスタムXML形式です)、もちろん特別な目的(通常はい)XMLエディターよりもEmacsを使用することを好みます。nXmlモードは過去に私をうまく支えてきましたが、「アウトライン」サポートを回避することはできません。さまざまなインターネットおよびSOの投稿は事実上何も言いません。XML構造自体を変更する必要があるかどうかにかかわらず、Emacs(任意のモード)でXMLのアウトライン/折りたたみに関する実用的な経験がある人はいないでしょうか。


輝いてください。
マラバルバ14年

ここで私はNXMLモードで任意のタグのコードを折りたたみを扱うしばらく前にやった例へのリンクです-おそらくそれはあなたがあなた自身のコードを開発助けることができるが: superuser.com/a/787030/206164 私が取り組んで特定のタグでしたxsl- -同じ名前のネストされたタグを処理するカウンターを組み込みました。
法律家14年

回答:


39

私はこのSOの投稿を見つけました: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
ショーン・オールレッド14年

3
@SeanAllred:タイプミスを修正しました。カットアンドペーストはキャッチに感謝します!
ダン

ブリリアント!またhideshow、バッファをスキャンして特定のタグなどのすべてのインスタンスを切り替えるなどのカスタム関数を簡単に作成できるように見えます。ヤクを剃りすぎる:)
マークAufflick 14年

@MarkAufflick hideshowはマウスをサポートしています。デフォルトでは、shift + mouse 2はhs-mouse-toggle-hidingにバインドされており、希望どおりに機能します。
ジョーダンビオンド

2
+1000。この答えは私の正気を救った。私はnxml-modeが大好きですが、nxml-modeと専用のXMLエディターを絶え間なく切り替えて、後者のタグ折り畳みをサポートしているだけです。しかし、マウスでの折り畳み/展開とGUI Emacsenでのツリー構造の線描画をサポートするdirtree.elと同じライブラリを使用してこの機能を実装できるかどうかは疑問です。
-dodgethesteamroller

12

web-modeには、に組み込まれバインドされた要素折りたたみがありC-c C-fます。ただし、nxml-modeを使用する機能の一部は明らかに失われます。


Webモードについては知りませんでした(最近はWeb開発をあまり行わないでください)。試してみて、報告します、ありがとう。
マークAufflick 14年

1
とても近い!残念ながら、webモードではxmlタグ名にアンダースコアを使用できません(これを使用しています)。Webモードコード全体に、何百ものハードコードされた正規表現文字列が散らばっています。私は修正する必要がありますが、それは疲れるので、ワークアウトで刺しました!それ以外の場合、Webモードでの折りたたみは実際に機能します:)
Mark Aufflick 14年

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.