Câu hỏi cũ về cách xếp câu hỏi XML XML


42

Tôi đang thực hiện khá nhiều chỉnh sửa XML thủ công (định nghĩa nguồn của một số thế hệ mã tôi đang làm là định dạng XML tùy chỉnh) và tất nhiên thích sử dụng Emacs hơn bất kỳ mục đích đặc biệt nào (thường là xấu xí). Chế độ nXml đã giúp tôi hoạt động tốt trong quá khứ, nhưng tôi không thể hiểu được sự hỗ trợ "phác thảo" của nó. Các bài đăng trên Internet và SO khác nhau không nói lên điều gì - Tôi tự hỏi liệu có ai có kinh nghiệm thực tế nào về việc phác thảo / gấp XML trong Emacs (bất kỳ chế độ nào) cho dù điều đó có yêu cầu thay đổi cấu trúc XML hay không.


Nhìn vào bên ngoài.
Malabarba

Đây là một liên kết đến một ví dụ mà tôi đã làm một lúc trước khi xử lý mã gấp cho các thẻ tùy ý trong chế độ nxml - có lẽ nó có thể giúp bạn phát triển mã của riêng mình: superuser.com/a/787030/206164 Thẻ cụ thể mà tôi đã xử lý là xsl- - Tôi kết hợp một bộ đếm để xử lý các thẻ lồng nhau có cùng tên.
luật

Câu trả lời:


39

Tôi tìm thấy bài viết SO này: https://stackoverflow.com/questions/944614/emacs-does-hemony-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)

Bạn có thể sử dụng mã từ đó, sửa đổi một chút, cho chế độ nxml dễ dàng.

Điều này sẽ cho phép bạn chuyển đổi ẩn / bỏ ẩn các phần tử xml với C-chvà sẽ hỗ trợ dấu gạch dưới trong tên.

nhập mô tả hình ảnh ở đây


2
lỗi đánh máy : nxml, khôngnmxl
Sean Allred

3
@Sean ALLred: Tôi đã sửa lỗi chính tả. Những người cắt tóc sẽ cảm ơn bạn vì đã nắm bắt!
Dân

Xuất sắc! Có vẻ như sẽ dễ dàng viết các chức năng tùy chỉnh hideshownhư quét bộ đệm để chuyển đổi tất cả các phiên bản của thẻ đã cho, v.v. Cũng sẽ rất tuyệt nếu nhấp vào dấu chấm lửng bằng chuột sẽ không ẩn, nhưng tôi sẽ không thử để cạo yak quá nhiều :)
Đánh dấu Aufflick

Trình diễn @MarkAufflick có hỗ trợ chuột, theo mặc định, shift + mouse 2 bị ràng buộc với ẩn hs-mouse-toggle-ẩn, hoạt động chính xác như bạn muốn.
Jordon Biondo

2
+1000. Câu trả lời này đã cứu tôi tỉnh táo. Tôi yêu chế độ nxml nhưng đã chuyển đổi liên tục giữa nó và một trình soạn thảo XML chuyên dụng chỉ để hỗ trợ gấp thẻ sau. Tuy nhiên, tôi tự hỏi liệu có thể thực hiện chức năng này bằng cách sử dụng cùng một thư viện như Dirtree.el , hỗ trợ gấp / mở bằng chuột và vẽ đường thẳng của cấu trúc cây trong GUI Emacsen không?
dodgethesteamler

12

chế độ web có phần tử gấp được tích hợp sẵn và ràng buộc C-c C-f. Nhưng rõ ràng bạn sẽ mất một số tính năng của việc sử dụng chế độ nxml.


Tôi không biết về chế độ web (không làm nhiều nhà phát triển web hiện nay). Tôi sẽ thử nó và báo cáo lại, cảm ơn.
Đánh dấu Aufflick

1
Thật gần! Thật không may, chế độ web không cho phép gạch dưới trong tên thẻ xml (mà chúng tôi sử dụng). Xả rác trong suốt mã chế độ web là hàng trăm chuỗi regex được mã hóa cứng gần giống nhau. Tôi đã có một nỗ lực để làm việc nên được sửa đổi nhưng vì kiệt sức!
Mặt

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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.