在 Elisp 中调试 "Error setting nil"

Debugging "Error setting nil" in 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.
    

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