我正在为一个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之后停用关键字的颜色对比?
答案 0 :(得分:0)
我认为您应该限制相关的正则表达式仅在关键字位于正确的位置时才限制,而不是在SENSOR
关键字后专门停用Autor
/ NAME
突出显示。上下文。
例如,如果NAME
和SENSOR
关键字应出现在行的开头,请在正则表达式中强制执行此约束。例如,您可以构建匹配的正则表达式:
(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语法