簡體   English   中英

像宏變量一樣的派生模式sh-mode

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM