【发布时间】:2015-04-05 23:59:25
【问题描述】:
我正在使用 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
)))
【问题讨论】:
-
请问您使用的典型代码示例是什么,开头的正则表达式始终与
<\([A-Za-z][A-Za-z0-9]*\)[^>]*>.*?匹配,而结尾的正则表达式始终与</\1>匹配 -
@lawlist 例如,我想折叠 div 的块:
<div>Something</div>,或者另一个块:<span class="someclass">some conent </span>。当前的代码甚至不适用于第一个简单的案例。 -
我尝试将您建议的代码粘贴到
*Scratch*缓冲区中——即<div>Something</div>和<span class="someclass">some conent </span>,然后我输入了M-x re-builder。在*RE-Builder*缓冲区中的双引号之间,我尝试了您建议的开始正则表达式——<\([A-Za-z][A-Za-z0-9]*\)[^>]*>.*?——然后我尝试使用你建议的结束正则表达式——</\1>。在这两种情况下,*Scratch*缓冲区中都没有突出显示。这似乎表明建议的开始正则表达式和建议的结束正则表达式不正确。 -
您是否尝试将开始和结束的正则表达式合并为一个并再次进行搜索?我怀疑分隔的字符串会使结束正则表达式的组匹配失败。
-
啊。 . . Emacs 喜欢在左括号和右括号上使用双反斜杠。 . .
<\\([A-Za-z][A-Za-z0-9]*\\)[^>]*>.*?我还在处理结尾正则表达式。