gpt4 book ai didi

Emacs 每个文件自定义

转载 作者:行者123 更新时间:2023-12-04 17:04:59 24 4
gpt4 key购买 nike

我有一个带有自定义宏的 Emacs Lisp 文件,我想要不同的字体化和缩进。代码如下:

(defmacro* when-let ((var value) &rest body)
`(let ((,var ,value))
(when ,var ,@body)))

(defun func ()
(when-let (a 1)
a))

我要 when-let字体化为 font-lock-keyword并按上述缩进。我知道我可以在我的 .emacs 文件中执行此操作,但我更愿意将其设为本地目录或文件本地自定义。问题是目录本地和文件本地自定义似乎仅限于设置变量。在我的 .emacs 文件中,我有以下内容。
(add-hook 'emacs-lisp-mode-hook
(lambda ()
(put 'when-let 'lisp-indent-function 1)
(font-lock-add-keywords nil
'(("(\\(when-let\\)\\>" 1
font-lock-keyword-face)))))

我想要这个在 .dir-locals.el因为它只适用于一个文件。

最佳答案

您可以通过指定 eval: 在文件局部变量 1 中指定用于评估的 elisp。值(文档说 'Eval:' 但只有小写的 'eval:' 似乎有效)。例如。:

;;; Local Variables:
;;; mode: outline-minor
;;; eval: (hide-body)
;;; End:

作为一项安全措施,Emacs 会在它看到尚未识别为安全的值时要求您确认。如果您告诉它永久记住它,它会将值写入 safe-local-variable-values(custom-set-variables) init 文件的部分。

请注意,上面启用次要模式的示例已弃用( mode 局部变量仅适用于主要模式),因此我们需要将其重写为另一种评估形式,在其中我们调用次要模式函数。

如果您需要评估多个表单,您可以指定多个 eval值,将按顺序评估:
;;; Local Variables:
;;; eval: (outline-minor-mode 1)
;;; eval: (hide-body)
;;; End:

或者,只需使用 progn:
;;; Local Variables:
;;; eval: (progn (outline-minor-mode 1) (hide-body))
;;; End:

不同之处在于,对于 safe-local-variable-values 而言,后者将被视为单个值。 , 而有多个 eval每个值都是独立考虑的。

1 C-hig (elisp) File Local Variables可再生能源

关于Emacs 每个文件自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com