Emacs lisp高亮显示

Emacs lisp高亮显示,emacs,elisp,Emacs,Elisp,我编写了一个简单的宏来定义交互函数,同时将它绑定到键 (这与我上一个问题有关) 唯一让我恼火的是,它看起来很难看,没有突出显示。 它这样称呼: (define-and-bind-command foo "C-x £" (message "Hello world")) 我希望突出显示define and bind命令和foo。 好的,为了突出显示define and bind命令,我可以使用defmacro的包装器, 虽然不是很漂亮,但我不知道foo的意思。 我知道这是可能的,因为require

我编写了一个简单的宏来定义交互函数,同时将它绑定到键 (这与我上一个问题有关) 唯一让我恼火的是,它看起来很难看,没有突出显示。 它这样称呼:

(define-and-bind-command foo "C-x £" (message "Hello world"))
我希望突出显示
define and bind命令
foo
。 好的,为了突出显示
define and bind命令
,我可以使用
defmacro
的包装器, 虽然不是很漂亮,但我不知道foo的意思。 我知道这是可能的,因为
require
的参数用const face突出显示

或者,可能是我发明了wheel,还有另一种lisp模式,其中包含了更多内容
高级突出显示?

突出显示“定义和绑定命令”可以很容易地使用“字体锁定添加关键字”来实现,使用方法将非常简单

(defun my-elisp-mode-keywords()
  (font-lock-add-keywords nil
    '(
      ("\\<\\(define-and-bind-command\\)" . 'font-lock-keyword-face)
    )
  )
)
突出显示foo部分可以使用regexp完成。 不幸的是,我还不能帮助您完成这一部分,因为我不确定如何匹配包含“define and bind command”但只突出显示单词after的regexp。
编辑:除非您想在同一个面中同时突出显示“定义和绑定命令”和foo部分,否则应该很容易。但我猜你想让他们有不同的面孔?
Edit3:更正了我的代码,stackoverflow在…
Edit4:好的,我有一个只匹配第二部分的解决方案,我没有对它进行过广泛的测试,但它似乎有效。我已经允许foo包含空格以外的任何字符(我认为是换行符),我想可以将该事件进一步限制为a-zA-z0-9和“-”,所以可以根据您的喜好随意更改。只负责匹配foo部分的代码是

("\\bdefine-and-bind-command\s\\([^\s]*\\)" 1 'font-lock-function-name-face t)
在上面函数中的另一个字体锁定关键字后面的行中插入该项,就可以开始了。regexp匹配“define and bind command”,该命令必须以一个单词(即\bfor)开头,后跟一个空格,然后返回(字体锁定)后面的所有内容,直到空格存在


希望这有帮助

字体锁定添加关键字
可以采用符号,即应用新关键字的模式。所以你可以

(font-lock-add-keywords 
 'emacs-lisp-mode
 '(("\\<\\(define-and-bind-command\\)" . 'font-lock-keyword-face)))
(字体锁定添加关键字)
'emacs lisp模式
'(("\\
(font-lock-add-keywords 
 'emacs-lisp-mode
 '(("\\<\\(define-and-bind-command\\)" . 'font-lock-keyword-face)))