【问题标题】:emacs: highlighting balanced expressions (eg. LaTeX tags)emacs:突出显示平衡的表达式(例如 LaTeX 标签)
【发布时间】:2012-04-23 16:47:55
【问题描述】:

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

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

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))))

如果有一个更通用的解决方案还是不错的!

【问题讨论】:

    标签: regex emacs latex elisp auctex


    【解决方案1】:

    您可以使用作用于 s 表达式的函数来处理要突出显示的区域,并使用this question 中提到的解决方案之一来实际突出显示它。

    这是一个例子:

    (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 手册的search-based fontification 部分所述:

    (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))))
    

    【讨论】:

    • 好主意,但我还不能完成这项工作。首先,“区域突出显示”的解决方案似乎对我没有任何帮助 - 即。单独执行 (add-text-properties 1 10 ...) 语句不会突出显示符号 1 到 10。其次,即使我让它工作,我有点担心突出显示会一直固定在缓冲。如果它可以自动工作也很好,就像其他语法高亮一样......
    • “我有点担心突出显示会一直固定在缓冲区中的那个位置” 事实并非如此:文本属性保持附加到它们的文本,而不是附加到缓冲区中的特定位置。
    • 对于您的另外两个问题,我认为 elisp 手册的 search-based fontification 部分应该对您有所帮助。您可以特别将function 元素添加到font-lock-keywords 变量。
    • @laxxy 请参阅我的编辑,了解如何在 Emacs 的字体锁定系统中使用突出显示功能。如果这个解决方案有效,也许我应该删除第一个不完整的命题......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多