我使用的是Emacs 23和php-mode.el 1.5.0.当我在我的这个.emacs
:
(require 'php-mode)
我在Emacs启动时收到此错误消息:
警告(初始化):加载`/Users/kdj/.emacs'时出错:
错误:必须在文件中使用`c-lang-defconst'
为确保正常运行,您应该调查并删除初始化文件中的错误原因.使用`--debug-init'选项启动Emacs以查看完整的错误回溯.
如果我(require 'php-mode)
在Emacs启动后评估,我不会收到任何错误消息.
我找到了一个博客条目,表明此问题是Emacs 23特有的(也就是说,Emacs 22.x没有错误),但它没有提供任何解决方案.
我不知道这是否重要,但我使用的是Mac OS X,并且我使用当前的CVS源构建了Emacs ./configure --with-ns
.
这里发生了什么,和/或我如何解决它?
我试图让csharp模式启动并运行时遇到了同样的问题.当我深入研究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模式切换工作.祝我好运.