1

我正在为 emacs 开发 pamcrash-mode.el 以简化我的生活。通过使用突出显示单个短语可以正常工作

(defvar pamcrash-keywords_red
  '("NAME" "SENSOR" "DATACHECK" "UNIT" "TITLE" "TIME" "INCLU"))

(defvar pamcrash-docu
  '("Autor" "Datum" "Basis" "VARIANTE" "BASISVAR." "DATUM" 
    "BEARBEITER" "BESCHREIBUNG" "HISTORY" "VERSION" "CAEBENCH" ))

(defvar pamcrash-font-lock-defaults
  `((
    ( ,(regexp-opt pamcrash-keywords_red 'words) . font-lock-warning-face)
    ( ,(regexp-opt pamcrash-docu 'words) . font-lock-comment-face)
    )))

(define-derived-mode pamcrash-mode fundamental-mode "PAM-Crash mode"
  (setq font-lock-defaults pamcrash-font-lock-defaults) )

(provide 'pamcrash-mode)

但是 Pam-Crash 文件中的某些行如下所示:

    NAME This is a string including the keyword SENSOR
    NAME This is a string including the keyword Autor

SENSOR/Autor 通常是关键字,必须突出显示,但这里有字符串的一部分,不应该。如何在 NAME 之后停用关键字的颜色对比?

4

3 回答 3

0

尝试在您的规则之前添加以下规则:

("\\<NAME\\> *\\(.*\\)" 1 font-lock-string-face)

这将使用字符串NAME的 face 为关键字之后的所有内容着色。

此外,将您的规则修改为:

( ,(regexp-opt pamcrash-keywords_red 'words) 0 font-lock-warning-face keep)
( ,(regexp-opt pamcrash-docu 'words) 0 font-lock-comment-face keep)

Wherekeep表示如果已经有一种颜色(阅读:字符串颜色),那么这不应该改变它。

注意:这不应与基于语法表中的信息执行的语法着色字体锁定相混淆。

于 2013-04-03T10:40:09.670 回答
0

我认为您应该限制相关的正则表达式仅在关键字处于正确位置或上下文时才匹配,而不是在关键字之后专门停用SENSOR/Autor突出显示。NAME

例如,如果NAMEandSENSOR关键字应该出现在行首,则在正则表达式中强制执行此约束。例如,您可以像这样构建匹配的正则表达式:

(defvar pamcrash-font-lock-defaults
  `((
    (,(concat "^[[:space:]]*" (regexp-opt pamcrash-keywords_red 'words)) . font-lock-warning-face)
    (,(concat "^[[:space:]]*" (regexp-opt pamcrash-docu 'words)) . font-lock-comment-face)
    )))
于 2013-03-27T11:01:59.777 回答
-1

如果您切换到 ViM,则可以使用完整的 pamcrash 语法

于 2015-09-13T06:49:12.327 回答