0

我正在为我在工作中经常使用的一些文件创建一个主要模式,并且在以不同颜色显示宏时遇到了一些问题。问题是宏出现在字符串中,即使我将 $ 字符设置为表达式字符,它们也会突出显示为字符串。即 "$(macro1)" 像字符串一样突出显示,而不是像宏

在这里,我尝试将 $ 字符设置为表达式的语法,并且还整理了注释语法:

(defvar test-syntax-table nil)
(defvar my-highlights nil)
(setq test-syntax-table
  (let ((synTable (make-syntax-table)))
    ;; bash style comment: “# …”
    (modify-syntax-entry ?# "< b" synTable)
    (modify-syntax-entry ?\n "> b" synTable)
    (modify-syntax-entry ?$ "'" synTable)
    synTable))
(setq my-highlights
  '(("record" . font-lock-function-name-face)
    ("field" . font-lock-keyword-face)
    ("$" . font-lock-variable-name-face)))

在这里我设置了语法表和亮点:

;;;###autoload
(define-derived-mode test-mode fundamental-mode
  (setq font-lock-defaults '(my-highlights))
  (set-syntax-table test-syntax-table)
  (setq comment-start "#")
  (visual-line-mode 0)
  (setq truncate-lines t)
  (setq mode-name "test"))

变化:

(defvar test-mode-syntax-table nil)
 (defvar my-highlights nil)
 (setq test-mode-syntax-table
       (let ((synTable (make-syntax-table)))
         ;; bash style comment: “# …”                                                                                                                                                                             
        (modify-syntax-entry ?# "< b" synTable)
        (modify-syntax-entry ?\n "> b" synTable)
        (modify-syntax-entry ?$ "'" synTable)
        synTable))
(setq my-highlights
  '(
    ("record" . font-lock-function-name-face)
    ("field" . font-lock-keyword-face)
    ("\\$" . (0 font-lock-variable-name-face override))
    ))



;;;###autoload                                                                                                                                                                                                   
(define-derived-mode test-mode fundamental-mode "test"
  (setq font-lock-defaults '(my-highlights))                                                                                                                                                                       
  (setq comment-start "#")
  (visual-line-mode 0)
  (setq truncate-lines t))
4

1 回答 1

0

您将派生模式命名为(setq font-lock-defaults '(my-highlights))。我必须说,这是一个相当古怪的选择。

因此,尝试按照上帝的意图重命名test-syntax-tabletest-mode-syntax-table然后删除set-syntax-table调用,因为重命名使它变得多余,然后删除(setq mode-name "test")"test"模式参数和font-lock-defaults.

然后,您可以尝试通过使用类似因为匹配行尾而不是字符的方法来修复$突出显示,并且因为默认情况下仅在之前未应用其他面的情况下应用面(并且首先应用字符串/注释的面)。("\\$" (0 font-lock-variable-name-face override))$$

于 2016-08-10T15:14:41.187 回答