gpt4 book ai didi

Emacs lisp 高亮显示

转载 作者:行者123 更新时间:2023-12-01 11:52:00 26 4
gpt4 key购买 nike

我编写了简单的宏来定义交互功能并同时将其绑定(bind)到键
(这与我之前的问题有关)
唯一让我恼火的是,没有突出显示它看起来很丑。
它是这样调用的:

(define-and-bind-command foo "C-x £" (message "Hello world"))

我要 define-and-bind-commandfoo被突出显示。
好吧,得到 define-and-bind-command突出显示,我可以在 defmacro 周围使用包装器,
虽然不太漂亮,我不知道 foo .
我知道这是可能的,因为 require 的参数用 const face 突出显示。

或者,也许,我正在发明轮子,还有另一种 lisp 模式,其中包含更多
高级突出显示?

最佳答案

使用'font-lock-add-keywords'可以很容易地突出显示'define-and-bind-command',用法是

(defun my-elisp-mode-keywords()
(font-lock-add-keywords nil
'(
("\\<\\(define-and-bind-command\\)" . 'font-lock-keyword-face)
)
)
)

当然,您可以将“font-lock-keyword-face”更改为您喜欢的任何面孔,或者创建和使用您自己的面孔。您可以通过将点(光标)移动到文本的字体锁定部分上并输入“describe-face”然后返回来非常容易地找到已经使用的面部名称。

编辑2:哦,当然你需要把这个 defun 挂到某个钩子(Hook)上,对于 elisp 模式,这将是:
(add-hook 'emacs-lisp-mode-hook 'my-elisp-mode-keywords)

可以使用正则表达式来突出显示 foo 部分。
不幸的是,我还不能帮助您完成这部分,因为我不确定如何匹配包含“定义和绑定(bind)命令”但仅突出显示后面的单词的正则表达式。
编辑:除非你想在同一张面上同时突出“define-and-bind-command”和 foo 部分,否则它应该很容易。但我猜你想让他们有不同的面孔?
编辑3:更正了我的代码,stackoverflow 之前吃了一些大括号...
编辑4:好的,我有一个仅匹配第二部分的解决方案,我没有对其进行广泛测试,但它似乎有效。我已经允许 foo 包含除空格以外的任何字符(我认为还有换行符),我想可以将该事件进一步限制为 a-zA-z0-9 和“-”,因此请随意根据自己的喜好进行更改。只负责匹配 foo 部分的代码是
("\\bdefine-and-bind-command\s\\([^\s]*\\)" 1 'font-lock-function-name-face t)

将它插入到上述函数中另一个 font-lock 关键字之后的行中,你就可以开始了。正则表达式匹配'define-and-bind-command',它必须以一个单词开头(即 \b for)后跟一个空格,然后返回(字体锁定)后面的所有内容,直到存在空格。

希望这可以帮助!

关于Emacs lisp 高亮显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670789/

26 4 0
文章推荐: r - 如何在多列中构建因子变量分布
文章推荐: dart - 在 Dart 中获取所选