29

我正在使用 Emacs 23 和php-mode.el 1.5.0。当我有这个时.emacs

(require 'php-mode)

当 Emacs 启动时,我收到此错误消息:

警告(初始化):加载“/Users/kdj/.emacs”时出错:

错误:必须在文件中使用“c-lang-defconst”

为确保正常运行,您应该调查并删除初始化文件中的错误原因。使用 `--debug-init' 选项启动 Emacs 以查看完整的错误回溯。

如果我在 Emacs 启动后进行评估(require 'php-mode),我不会收到任何错误消息。

我发现一个博客条目表明这个问题是 Emacs 23 特有的(也就是说,Emacs 22.x 没有错误),但它没有给出任何解决方案。

我不知道这是否重要,但我使用的是 Mac OS X,并且我从当前的 CVS 源构建 Emacs,使用./configure --with-ns.

这里发生了什么,和/或我该如何解决?

4

2 回答 2

51

在尝试启动并运行 csharp-mode 时,我遇到了同样的问题。在深入研究 csharp-mode 的实际 Emacs Lisp 文件时,我终于找到了解决方案:

;;   This code doesn't seem to work when you compile it, then
;;   load/require in the Emacs file. You will get an error (error
;;   "`c-lang-defconst' must be used in a file") which happens because
;;   cc-mode doesn't think it is in a buffer while loading directly
;;   from the init. However, if you call it based on a file extension,
;;   it works properly. Interestingly enough, this doesn't happen if
;;   you don't byte-compile cc-mode.

因此,放入 .emacs 的快速而肮脏的修复方法是在扩展名上自动加载,而不是放入(require 'php-mode)(load "php-mode")放入其中。无需再费周折,

(autoload 'php-mode "php-mode" "Major mode for editing php code." t)
(add-to-list 'auto-mode-alist '("\\.php$" . php-mode))
(add-to-list 'auto-mode-alist '("\\.inc$" . php-mode))

我希望这有帮助!现在我只需要让 PHP/HTML 模式切换的东西工作。祝我好运。

于 2009-05-27T20:02:04.837 回答
1

它适用于http://mewde.googlecode.com/files/php-mode-new.el

于 2010-03-16T19:49:23.650 回答