emacs - 在 Elisp 中调试 "Error setting nil"

标签 emacs elisp

我的 Emacs 配置文件中有这段 Elisp 代码:

(when (string= (getenv "TERM") "screen")
  (custom-set-variables
   (custom-set-faces
    '(font-lock-comment-face ((((class color)
                                (min-colors 8)
                                (background dark))
                                (foreground red)))))))

当我启动 Emacs 时,我从这段代码中得到 Error setting nil: (setting-constant nil) 。虽然它看起来工作正常,但我知道这可能是一些隐藏问题的迹象。我不太了解 Elisp,因此我需要帮助。谁能解释一下这个错误并告诉我如何消除它?我使用的是 Emacs 24.3.1

最佳答案

恐怕这有很多问题。

  1. custom-set-facescustom-set-variables 是两种不同的形式;你不应该在另一个内部调用一个。

  2. 您不应该将对这些函数中的任何一个的调用包装在条件表达式中。当您使用 customize 界面时,这两种表单都会自动生成和更新,如果它们不是 init 文件中的顶级表单,Emacs 将找不到它们。这意味着它会在需要时为每个副本创建一个附加副本。这导致...

  3. 您不得拥有这些表单的多个实例。事实上,Emacs 在生成表单时包含以下警告注释:

    ;; Your init file should contain only one such instance.
    ;; If there is more than one, they won't work right.
    

    现在你正在鼓励这种情况发生。

关于emacs - 在 Elisp 中调试 "Error setting nil",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28086626/

相关文章:

emacs - 选择窗口时做一些事情

emacs - 使用交互式 Emacs Lisp 函数替换文本的帮助

macos - 通过 lein、命令行或 emacs 从命令选项卡应用程序切换器隐藏 Clojure REPL

emacs - 在 Emacs 中为 tex-mode 修改 Alt+f

emacs - 将 emacs calc 向量插入 org-mode 表电子表格

emacs - 如何从compilation-error-regexp-alist 文件函数中获取当前匹配的行?

emacs - 如何重构 Clojure 源代码?

emacs - org-mode 不能编辑 C 源代码

emacs - 在 Emacs 中替换字符

emacs 不会重绘缓冲区(Windows 7)