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-tableしてから、名前を変更すると冗長になったため呼び出しを削除し、を削除して、親モード引数と の設定の間に追加します。test-mode-syntax-tableset-syntax-table(setq mode-name "test")"test"font-lock-defaults

次に、文字ではなく行末に一致するsinceの$ようなものを使用して、強調表示を修正してみてください。また、デフォルトでは、以前に他の面が適用されなかった場所にのみ面が適用されるため (文字列/コメントの面が最初に適用されます)。("\\$" (0 font-lock-variable-name-face override))$$

于 2016-08-10T15:14:41.187 に答える