Emacs 按文件定制

2024-01-06

我有一个带有自定义宏的 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(使用前将#替换为@)

Emacs 按文件定制 的相关文章

  • Org-Mode 中的 FlySpell 可以像 auctex 一样识别 Latex 语法

    原始回复 我试图弄清楚在 auctex 模式下乳胶如何在打开 Flyspell 的情况下似乎不会突出显示任何乳胶功能 这是一个自定义词典文件还是如何实现的 这可以很容易地合并到组织模式文件中 这样它就不会突出显示将导出的插入乳胶代码吗 编辑
  • 如何使用Emacs运行方案?

    我跟着这个tutorial http jeffcjensen net scheme 并成功安装了Emacs STk Quack 问题是我怎样才能像在 Racket 中那样加载我的程序 在 Racket 中 我可以在上方窗口中编辑代码 输入一
  • ido-mode 绑定被全局设置键屏蔽

    堆栈溢出 在过去的几天里 我试图稍微定制一下我的 emacs 但我遇到了我不知道如何解决的问题 我想做的是定义一个全局键绑定和一个 ido 模式键绑定 它们将使用相同的键来做不同的事情 Ido 模式键绑定定义如下 defun ido my
  • Emacs 启动时出现 24 错误

    我已经使用 emacs snapshot 一段时间了 但最近它崩溃了很多 所以我切换到 Emacs 24 但是一旦我安装并启动它 它就开始显示错误并且不会在我的 init el 中加载任何内容 当我在调试模式下运行它时 我得到了这个 Deb
  • Mac 上的 Emacs 和 MySQL

    我尝试使用 sql mysql 模式 但 emacs 无法找到文件 目录 mysql 但是 我可以从终端访问它 如何将 emacs 中的 mysql 指向 usr local mysql bin mysql setq sql mysql p
  • Emacs 打字骨架对插入也许

    在 Eclipse 中 编辑 Java 代码时 如果我输入一个左括号 我会得到一对括号 如果我然后 输入 第二个括号 它不会插入额外的括号 我如何在 emacs 中得到它 Eclipse 编辑器足够聪明 当我输入闭括号时 它知道我刚刚完成了
  • 在 Slime 中复制/猛拉整个 Lisp 表单

    有没有办法在 Slime Emacs 中复制 猛拉整个表单 例如 如果我有以下功能 myfunc lst myotherfunc lst 我想复制 复制 myotherfunc lst 当我的光标位于该表单的左括号或右括号时 在 Slime
  • 如何找到 emacs 中定义键绑定的位置?

    Somehow shift m是必然的Meta在 emacs 中键入 现在我无法输入任何以M like Mock 我想找出为什么会发生这种情况 或者是哪个包导致了这种情况 有一个问题 https stackoverflow com ques
  • 使用 slime 时如何跳转到 emacs 中的函数定义?

    我已经使用安装了史莱姆https github com thephoeron slime pack https github com thephoeron slime pack并想进一步探索 common lisp 如何访问 emacs 中
  • 要求 Emacs 更清楚地突出显示哪个窗口(窗格)具有焦点(光标)

    假设我将 Emacs 窗口分成多个图块 例如 When I switch between tiles aka windows in Emacs to edit my files e g using C x o I can see on wh
  • ess-rdired:我收到此错误“现在没有 ESS 进程与此缓冲区关联”

    To use ess rdired为了浏览对象 我按照 ESS 手册并将以下内容添加到我的 emacs autoload ess rdired ess rdired View R objects in a dired like buffer
  • 在 emacs 的文件中不断出现的这些 ^M 是什么?

    我认为这可能与 TextMate 有关 但我们在一个小团队中工作 并且在 git 中几乎相同的文件的全文件冲突方面遇到了一些问题 在一个分支中 文件的每一行都附加了 M 这是什么神秘的事 M角色应该做什么 它从哪里来 我们的开发人员在 Wi
  • 如何在组织模式下关闭公司模式?

    我正在使用 spacemacs 并尝试在组织模式下关闭公司模式 同时将其保留在其他主要模式中 我尝试过以下方法 global company mode not org mode 但它不起作用 禁用自org mode hook 此方法几乎适用
  • Emacs 和 Anaconda。链接问题

    我有一个问题 为了运行Anaconda https store continuum io cshop anaconda 我需要unset LD LIBRARY PATH 为了运行 Emacs 以及其他程序 我需要set LD LIBRARY
  • Emacs 中 hunspell 的工作设置

    有没有人有工作设置hunspell and Emacs 简单设定ispell program name to hunspell不起作用 输出 例如 使用 Flyspell 时 如下所示 gt UTF 8 encoding error Mis
  • 我把 IPython 配置文件放在哪里?

    我已经尝试将 edit 编辑器设置为 Emacs 一段时间了 但进展非常缓慢 IPython 0 13 文档不清楚如何实际配置它 它告诉我通过添加将 EDITOR 设置为所需的编辑器 在我的例子中为 emacsclient c get co
  • Emacs中跳转到声明的快捷键是什么?

    在 Visual Studio 中 编辑 C C 代码时 按 F12 按钮可以更轻松地跳转到函数或变量的声明 emacs 有快捷键可以做到这一点吗 嗯 事情比这更复杂一些 默认情况下 Emacs 不 了解 C 或 C 代码的函数声明 首先
  • Emacs、ruby:将 do 结束块转换为大括号,反之亦然

    我经常发现自己转换这样的代码 before do something end to before something 有没有办法在 emacs 中自动执行此任务 我使用 ruby mode 和 rinary 但它们在这里没有太大帮助 rub
  • Shift 键在我的 emacs 中不起作用

    I run emacs in gnome terminal with nw option it works well except for some key shortcuts that include the shift key For
  • 在 Elisp 中如何获取变量的初始值?

    在Emacs Lisp中 是否有一个函数可以获取由以下方式初始化的符号的初始值defvar 像some function如下图所示 defvar var initial value setq var changed value some f

随机推荐