如何突出显示所有功能';在Emacs';lisp模式?
如何在Emacs的lisp模式下突出显示所有函数名?我要他们加粗 换句话说,从如何突出显示所有功能';在Emacs';lisp模式?,emacs,lisp,elisp,syntax-highlighting,font-lock,Emacs,Lisp,Elisp,Syntax Highlighting,Font Lock,如何在Emacs的lisp模式下突出显示所有函数名?我要他们加粗 换句话说,从(到第一个空格的所有单词都不关心异常,如(a.b) 就像GitHub一样: 使用以下方法: (defface font-lock-func-face '((nil (:foreground "#7F0055" :weight bold)) (t (:bold t :italic t))) "Font Lock mode face used for function calls." :gro
(
到第一个空格的所有单词都不关心异常,如(a.b)
就像GitHub一样:
使用以下方法:
(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)))
(defface字体锁定功能面
((无(:前景“#7F0055”:粗体)
(t(:粗体t:斜体t)))
“用于函数调用的字体锁定模式面。”
:组字体锁定突出显示面)
(字体锁定)添加关键字
'emacs lisp模式
“(”(\\s-*\\(\\\\”
1“字体锁定功能面”))
有趣的是:这会弄乱let
绑定,就像Github一样。
但这正是您所要求的,对吗?下面的代码突出显示了已知Emacs Lisp函数的名称
请注意,即使给定函数名的某些出现不代表该函数,它也会这样做。例如,该名称可能用作变量名。这在实践中不是一个大问题,但最好知道
;; `setq' is a variable here, but it is highlighted anyway.
(let ((setq (foobar)))...)
要在Emacs Lisp模式下自动打开高亮显示,请执行以下操作:
(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)))
注意:如果只想查看此高亮显示的效果,请首先在Emacs Lisp模式缓冲区中执行此操作,以消除其他Emacs Lisp字体锁定高亮显示:
M-: (setq font-lock-keywords ()) RET
更新---
我为此创建了一个次要模式命令和库:
- 代码:
它允许您突出显示已定义的Emacs Lisp符号:函数和变量、仅函数或仅变量。或者,您可以仅突出显示已知已定义的符号。谢谢!现在我明白了,\(…\\)
是重点。但我想知道“1”是什么含义?1表示第一个捕获的组,2表示第二个捕获的组,如果有。0表示整个匹配更好:请删除变量,只保留defface
。面变量已过时。您可能需要使用内置的字体锁定函数名称Face
。regexp无法捕获一些相当常见的函数名(即string=
,这不会覆盖已高亮显示的文本:(字体锁定添加关键字'lisp mode'(“(\\s-*\(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(点上的对象符号)
?可能,可能不是;-)例如,请参阅在点调用的函数。