Производный режим sh-mode типа макропеременных
Я создаю основной режим для некоторых файлов, которые я постоянно использую на работе, и у меня возникают проблемы с отображением макросов в другом цвете. Проблема в том, что макросы встречаются в строках, и они выделяются как строки, хотя я установил символ $ в качестве символа выражения. то есть "$(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))
1 ответ
Вы назвали свой производный режим (setq font-lock-defaults '(my-highlights))
, Должен сказать, это довольно странный выбор.
Итак, попробуйте переименовать test-syntax-table
в test-mode-syntax-table
как задумал бог, тогда удали set-syntax-table
вызов, так как переименование сделало его избыточным, затем удалите (setq mode-name "test")
и добавить "test"
между аргументом родительского режима и настройкой font-lock-defaults
,
Тогда вы можете попытаться исправить $
выделение с помощью чего-то вроде ("\\$" (0 font-lock-variable-name-face override))
поскольку $
соответствует концу строки, а не $
символ, и поскольку по умолчанию грани применяются только в тех случаях, когда ранее не было применено ни одного другого лица (и лица строк / комментариев применяются первыми).