在emacs中,有没有办法让hideshow模式识别多个正则表达式以便隐藏?
答案 0 :(得分:4)
取自EmacsWiki。如果我理解你的问题,你可能会失去运气,但“没有简单的方法”可能意味着有一个复杂的方法可以找到。
祝你好运没有简单的指定方法 单个的多个正则表达式对 语言,例如,
* Open: {, close: } * Open: #ifdef, close: #else or #elif or … etc.
答案 1 :(得分:0)
我假设您的意思是相同的模式。可以这样做,但是需要一些省略号和一些小的正则表达式。您将需要拥有或创建一种方法来检测您所处的子模式。
让我们以mhtml-mode(HTML / CSS / JS)为例:
;;; .emacs
;; When called this automatically detects the submode at the current location.
;; It will then either forward to end of tag(HTML) or end of code block(JS/CSS).
;; This will be passed to hs-minor-mode to properly navigate and fold the code.
(defun mhtml-forward (arg)
(interactive "P")
(pcase (get-text-property (point) `mhtml-submode)
(`nil (sgml-skip-tag-forward 1))
(submode (forward-sexp))))
;; Adds the tag and curly-brace detection to hs-minor-mode for mhtml.
(add-to-list 'hs-special-modes-alist
'(mhtml-mode
"{\\|<[^/>]*?"
"}\\|</[^/>]*[^/]>"
"<!--"
mhtml-forward
nil))
函数mhtml-forward
检测应使用哪种类型的转发语句。
Hideshow设置为识别开始表达式{
和<tag>
,以及结束表达式}
和</tag>
。它将始终与正确的匹配,因为自定义转发功能可让您找到该特定实例的正确关闭表达式。