아래 코드는 정규 표현식 대신 함수와 함께 글꼴 잠금 규칙을 사용하며, 함수 $VAR
는 큰 따옴표로 묶인 문자열 안에있을 때만 발생을 검색 합니다. 이 함수 (syntax-ppss)
는이를 결정하는 데 사용됩니다.
글꼴 잠금 규칙은 prepend
플래그를 사용 하여 기존 문자열 강조 표시 위에 자신을 추가합니다. (많은 패키지가이를 위해 사용한다는 점에 유의 t
하십시오. 불행히도, 이것은 기존 강조 표시의 모든 측면을 덮어 씁니다. 예를 들어를 사용 prepend
하면 전경색을 바꾸면서 문자열 배경색 (있는 경우)을 유지합니다.)
(defun sh-script-extra-font-lock-is-in-double-quoted-string ()
"Non-nil if point in inside a double-quoted string."
(let ((state (syntax-ppss)))
(eq (nth 3 state) ?\")))
(defun sh-script-extra-font-lock-match-var-in-double-quoted-string (limit)
"Search for variables in double-quoted strings."
(let (res)
(while
(and (setq res
(re-search-forward
"\\$\\({#?\\)?\\([[:alpha:]_][[:alnum:]_]*\\|[-#?@!]\\)"
limit t))
(not (sh-script-extra-font-lock-is-in-double-quoted-string))))
res))
(defvar sh-script-extra-font-lock-keywords
'((sh-script-extra-font-lock-match-var-in-double-quoted-string
(2 font-lock-variable-name-face prepend))))
(defun sh-script-extra-font-lock-activate ()
(interactive)
(font-lock-add-keywords nil sh-script-extra-font-lock-keywords)
(if (fboundp 'font-lock-flush)
(font-lock-flush)
(when font-lock-mode
(with-no-warnings
(font-lock-fontify-buffer)))))
마지막 함수를 적절한 후크에 추가하여이를 사용하여 호출 할 수 있습니다 (예 :
(add-hook 'sh-mode-hook 'sh-script-extra-font-lock-activate)
sh-mode
않을까요? 아마도 Emacs 자체에 추가 될 수 있습니다.