emacs忽略关键字后突出显示

时间:2013-03-27 08:22:57

标签: emacs colors highlight

我正在为一个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之后停用关键字的颜色对比?

3 个答案:

答案 0 :(得分:0)

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

例如,如果NAMESENSOR关键字应出现在行的开头,请在正则表达式中强制执行此约束。例如,您可以构建匹配的正则表达式:

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

答案 1 :(得分:0)

尝试在规则之前添加以下规则

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

这将使用字符串的面为NAME关键字后面的所有内容添加颜色。

另外,请将您的规则修改为:

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

keep表示如果已经有颜色(读取:字符串颜色),则不应改变颜色。

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

答案 2 :(得分:-1)

如果您使用ViM,可以使用完整的pamcrash语法