5

什么是让 Emacs 突出显示可能包含平衡括号之类的表达式的好方法——例如

\highlightthis{some \textit{text} here
some more text
done now}

highlight-regex非常适合简单的事情,但是我在编写 emacs 正则表达式来识别换行符时遇到了很大的麻烦,当然它匹配到第一个右括号。

(作为第二个问题:任何扩展 emacs 正则表达式语法的包的指针将不胜感激——我很难使用它,而且我对 perl 中的正则表达式相当熟悉。)

编辑:出于我的特定目的(在 AUCTeX 缓冲区中突出显示的 LaTeX 标记),我能够通过自定义 AUCTeX 特定变量来使其工作,在 .emacsfont-latex-user-keyword-classes中添加类似这样的内容:custom-set-variables

'(font-latex-user-keyword-classes (quote (("mycommands" (("highlightthis" "{")) (:slant italic :foreground "red") command))))

不过,一个更通用的解决方案仍然很好!

4

1 回答 1

1

您可以使用作用于 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)))))

编辑:这是一个使用 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))))
于 2012-04-24T06:30:02.297 回答