我有一个带有自定义宏的 Emacs Lisp 文件,我想要以不同的方式字体和缩进。代码如下:
(defmacro* when-let ((var value) &rest body)
`(let ((,var ,value))
(when ,var ,@body)))
(defun func ()
(when-let (a 1)
a))
I want 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
因为它只适用于一个文件。
You can specify elisp for evaluation in file local variables1 by specifying an eval:
value (the documentation says 'Eval:' but only lower-case 'eval:' seems to work). e.g.:
;;; Local Variables:
;;; mode: outline-minor
;;; eval: (hide-body)
;;; End:
作为一项安全措施,Emacs 每当看到它尚未识别为安全的值时都会要求您确认。如果你告诉它永久记住它,它会将值写入safe-local-variable-values
in the (custom-set-variables)
初始化文件的部分。
请注意,上面启用次要模式的示例已被弃用(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
RET
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)