lax*_*xxy 5 regex emacs latex elisp auctex
让Emacs突出显示可能包含平衡括号之类的表达式的好方法是什么 - 例如
\highlightthis{some \textit{text} here
some more text
done now}
Run Code Online (Sandbox Code Playgroud)
highlight-regex 适用于简单的事情很好,但我在写一个emacs正则表达式以识别换行符时遇到了麻烦,当然它匹配到第一个结束括号.
(作为第二个问题:指向任何扩展emacs正则表达式语法的包的指针将非常感激 - 我很难用它,我对perl中的正则表达式非常熟悉.)
编辑:为了我的特定目的(在AUCTeX缓冲区中突出显示的LaTeX标签),我能够通过自定义AUCTeX特定变量font-latex-user-keyword-classes来实现此功能,custom-set-variables在.emacs 中添加类似这样的内容:
'(font-latex-user-keyword-classes (quote (("mycommands" (("highlightthis" "{")) (:slant italic :foreground "red") command))))
Run Code Online (Sandbox Code Playgroud)
虽然更通用的解决方案仍然很好!
您可以使用作用于 s 表达式的函数来处理要突出显示的区域,并使用此问题中提到的解决方案之一来实际突出显示它。
这是一个例子:
(defun my/highlight-function ()
(interactive)
(save-excursion
(goto-char (point-min))
(search-forward "\highlightthis")
(let ((end (scan-sexps (point) 1)))
(add-text-properties (point) end '(comment t face highlight)))))
Run Code Online (Sandbox Code Playgroud)
编辑:这是一个使用 Emacs 标准字体锁定系统的类似功能的示例,如emacs-lisp 手册的基于搜索的字体化部分中所述:
(defun my/highlight-function (bound)
(if (search-forward "\highlightthis" bound 'noerror)
(let ((begin (match-end 0))
(end (scan-sexps (point) 1)))
(set-match-data (list begin end))
t)
nil))
(add-hook 'LaTeX-mode-hook
(lambda ()
(font-lock-add-keywords nil '(my/highlight-function))))
Run Code Online (Sandbox Code Playgroud)