gpt4 book ai didi

html - 如何在 Emacs 中折叠 html 标签?

转载 作者:行者123 更新时间:2023-11-27 23:46:53 26 4
gpt4 key购买 nike

我正在使用 hs-minor-mode 和 fold-dwim 模式。

我在正则表达式下面添加了通过设置变量 hs-special-modes-alist 来匹配 html 标签:

(html-mode "<\([A-Za-z][A-Za-z0-9]*\)[^>]*>.*?" "</\1>" "-->" nil nil)
;; Format: (MODE START END COMMENT-START FORWARD-SEXP-FUNC ADJUST-BEG-FUNC)

但是当我在 html 文件中使用它(使用命令 fold-dwim-toggle.)时没有任何效果。


这是我的 .emacs 文件中的相关部分:

;; hideshow
(setq hs-special-modes-alist
(mapcar 'purecopy
'((c-mode "{" "}" "/[*/]" nil nil)
(c++-mode "{" "}" "/[*/]" nil nil)
(bibtex-mode ("@\\S(*\\(\\s(\\)" 1))
(java-mode "{" "}" "/[*/]" nil nil)
(js-mode "{" "}" "/[*/]" nil)
;; (html-mode "<!-- {{{ " "<!-- }}} -->" " -->" nil t)
(html-mode "<\([A-Za-z][A-Za-z0-9]*\)[^>]*>.*?" "</\1>" "-->" nil nil) ;gw: self edited, see blw ref:
;; http://www.regular-expressions.info/examples.html
)))

最佳答案

我不熟悉 hs-special-modes-alist .但是简要地查看源代码,我没有看到任何暗示 END 的迹象。图案可以引用BEGIN pattern 的子组,我想这就是你试图通过使用 "</\1>" 来做的事情.我猜你想要 \1BEGIN 的第一个子组匹配的任何内容替换模式。

没有hs-special-modes-alist的例子在代码中使用子组匹配号(例如 \1 )。医生说 END本身需要是一个正则表达式。大概它与 START 独立地匹配结尾匹配开头。

文档确实提到了 START本身可以“(COMPLEX-START MDATA-SELECTOR) 形式的列表,其中 COMPLEX-START 是一个包含多个部分的正则表达式,并且 MDATA-SELECTOR一个整数,指定哪个子匹配是正确的调用之前调整点的位置hs-forward-sexp-func .

我认为这不会立即对应您想要的内容,但至少它表明使用了子组匹配。也许您可以使用它来匹配开始和结束标签。我没有进一步查看代码,例如查看在哪里以及如何hs-forward-sexp-func被使用。

另一方面,您通常需要在 Lisp 字符串中使用双反斜杠。所以如果你想要 \1你可能需要使用 "</\\1>" .同样,对于 \( - 使用 \\(等等

也许这会让你更接近你想要的东西。

(注意,顺便说一句,正则表达式是尝试解析诸如 HTML 代码之类的东西的糟糕方法。)

关于html - 如何在 Emacs 中折叠 html 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29463639/

26 4 0