[英]Derived mode sh-mode like macro variables
我正在為我經常在工作中使用的某些文件創建主要模式,並且在顯示以不同顏色顯示的宏時遇到了一些問題。 問題是,即使我將$字符設置為表達式字符,宏也以字符串形式出現並且被突出顯示為字符串。 即“ $(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))
您將派生模式命名為(setq font-lock-defaults '(my-highlights))
。 我必須說,這是一個相當古怪的選擇。
因此,請按照上帝的意圖將test-syntax-table
重命名為test-mode-syntax-table
,然后刪除set-syntax-table
調用,因為重命名使其變得多余,然后刪除(setq mode-name "test")
並在父模式參數和font-lock-defaults
設置之間添加"test"
。
然后,您可以嘗試使用類似("\\\\$" (0 font-lock-variable-name-face override))
的方法來修復$
高亮顯示,因為$
匹配行尾而不是$
字符,並且默認情況下僅在之前未應用其他面孔的情況下應用面孔(並且首先應用字符串/注釋的面孔)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.