如何在Emacs的lisp-mode中突出显示所有函数名?我希望它们是加粗的。
换句话说,所有从
就像GitHub一样:
换句话说,所有从
(
到第一个空格
的单词都要突出显示。不关心像(a.b)
这样的例外。就像GitHub一样:
(
到第一个空格
的单词都要突出显示。不关心像(a.b)
这样的例外。(defface font-lock-func-face
'((nil (:foreground "#7F0055" :weight bold))
(t (:bold t :italic t)))
"Font Lock mode face used for function calls."
:group 'font-lock-highlighting-faces)
(font-lock-add-keywords
'emacs-lisp-mode
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>"
1 'font-lock-func-face)))
let
绑定,就像Github一样。但这正是您要求的,对吧:)?;; `setq' is a variable here, but it is highlighted anyway.
(let ((setq (foobar)))...)
(font-lock-add-keywords 'emacs-lisp-mode
'((my-fl . 'font-lock-constant-face)) ; Or whatever face you want. 'APPEND)
(defun my-fl (_limit)
(let ((opoint (point))
(found nil))
(with-syntax-table emacs-lisp-mode-syntax-table
(while (not found)
(cond ((condition-case ()
(save-excursion
(skip-chars-forward "'")
(setq opoint (point))
(let ((obj (read (current-buffer))))
(and (symbolp obj) (fboundp obj)
(progn (set-match-data (list opoint (point))) t))))
(error nil))
(forward-sexp 1)
(setq opoint (point)
found t))
(t
(if (looking-at "\\(\\sw\\|\\s_\\)")
(forward-sexp 1)
(forward-char 1)))))
found)))
M-: (setq font-lock-keywords ()) RET
更新 ---
我为此创建了一个小型模式命令和库:
hl-defined.el
说明
它可以让你突出显示定义的Emacs-Lisp符号:函数和变量,仅函数或仅变量。或者你可以突出显示仅未知是否定义的符号。
condition-case
不能用(thing-at-point 'symbol)
替换吗? - user355252function-called-at-point
。 - Drew
\\(...\\)
是关键点了。但我想知道那个“1”代表什么意思? - kuanyuidefface
。面部变量已经过时。您可能希望改用内置的font-lock-function-name-face
。正则表达式无法捕获一些非常常见的函数名(例如string =
,<=
,+
或foo/bar
)。"(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>"
可以提供更全面的覆盖范围。 - user355252(font-lock-add-keywords 'lisp-mode '(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>" 1 'font-lock-func-face keep)) t)
- Bad_ptr