想问一下,自定义关键字序列,如何指定自定义 face

请问,分别创建一个关键字序列,和一个自定义 face。如何将它们关联起来,高亮呢?

(setq the-keywords
	  '((sequence "key-1" "key-2" "key-3")))

(defface the-keywords-face
  '((((background light))
	 :foreground "dark orchid"
	 :family "FiraCode Nerd Font"
	 :weight bold)
    (t
	 :foreground "red"
	 :family "FiraCode Nerd Font"
	 :weight bold)
	)
  "face for the-keywords"
  :group 'the-keywords
  )

1 个赞

:blush:感谢大佬!
根据大佬的提示,我使用以下代码基本实现了高亮!

(defface the-keywords-face
  '((((background light))
	 :foreground "#0000ff"
	 :family "FiraCode Nerd Font"
	 :weight bold)
    (t
	 :foreground "#ff0000"
	 :family "FiraCode Nerd Font"
	 :weight bold)
	)
  "face for the-keywords"
  :group 'the-keywords
  )

(add-hook 'python-mode-hook
		  (lambda ()
			(font-lock-add-keywords nil
									'(
									  ("hou\\|Node\\|createNode" . 'the-keywords-face)
									  )
									)
			)
		  )

可以参考 hi-lock.el 来实现, 好处是支持正则,而且性能还可以, 做了一个高亮log文件的工具, 当文件超过100M 时也能正常高亮

(require 'hi-lock)
(defvar hdl-log-face-keywords
  '(
    ;; (:key "UVM_INFO" :face hi-black-hb)
    (:key "UVM_INFO" :face success)
    (:key "Error" :face error)
    (:key "Wrong\\|UVM_WARNING" :face org-agenda-structure-filter)
    (:key "UVM_FATAL" :face diff-error)
    (:key "ucli" :face hi-black-hb)
    (:key "SUCCESSFULLY" :face hi-green-b)
    (:key "FAILED" :face error)
    (:key "UVM_ERROR" :face compilation-error)
    (:key "uvm_test_top.*? " :face link-visited)
    (:key " [a-zA-Z0-9_-]+err *:" :face org-warning)
    (:key "[0-9\.]+" :face hi-blue-b)
    (:key "0x[0-9a-fA-F]+" :face hi-blue-b)
    (:key "'b[01]+" :face hi-blue-b)
    (:key "'h[0-9a-fA-F]+" :face hi-blue-b)
    )
  " face 可以通过运行 (hi-lock-read-face-name) 这个函数获得")
(defun my/highlight-keyword-in-hdl-log (key-face-list)
  ;; (message "key %S" (plist-get key-face-list :key))
  ;; (message "face %S" (plist-get key-face-list :face))
  (hi-lock-set-pattern
   (plist-get key-face-list :key) (plist-get key-face-list :face) nil nil
   (if (and case-fold-search search-upper-case)
       (isearch-no-upper-case-p (plist-get key-face-list :key) t)
     case-fold-search)
   search-spaces-regexp))

(defun my/unhighlight-keyword-in-hdl-log (key-face-list)
  (hi-lock-unface-buffer (plist-get key-face-list :key)))


效果如下:

1 个赞

好的,感谢! :blush:我研究一下!