2

在 Ubuntu 上的 Emacs23 上使用 php-mode 时,我不断收到此错误和类似错误:

Debugger entered--Lisp error: (void-function php-template-if-hook)
  php-template-if-hook()
  abbrev-insert(if #("if" 0 2 (fontified t face font-lock-keyword-face)) 414 416)
  #[(G73404 funs global) "[Byte Code]"
  apply(#[(G73404 funs global "[Byte Code]"
  (lambda (&rest --cl-rest--) (apply #[... "[Byte Code]"
  expand-abbrev()
  self-insert-command(1)
  c-electric-paren(nil)
  call-interactively(c-electric-paren nil nil)

当我输入时,以及当我输入或以 结尾的任何内容if(时出现以下错误,例如:array(array(is_array(

Debugger entered--Lisp error: (void-function php-template-if-hook)
  php-template-if-hook()
  abbrev-insert(if #("if" 0 2 (fontified t face font-lock-keyword-face)) 414 416)
  #[(G73404 funs global) "[Byte code]"
  apply(#[(G73404 funs global "[Byte Code]"
  (lambda (&rest --cl-rest--) (apply #[... "[Byte Code]"
  expand-abbrev()
  self-insert-command(1)
  c-electric-paren(nil)
  call-interactively(c-electric-paren nil nil)

即使我使用 emacs 入门套件,也会引发此错误。有人解决了类似的问题吗?

我使用的 php-mode.el 来自emacs starter kit,它捆绑了一个版本的nxhtml。我尝试使用php-mode-1.5.0仍然没有成功。我什至尝试使用最新版本的 nxhtml(2.2),但仍然存在相同的错误。我必须复制并粘贴mewde中缺少的所有函数定义,才能使其正常工作。我不得不说它确实增加了一些价值。:)

有趣的是,这个问题对我来说似乎是 Ubuntu Karmic 唯一的问题,我在 opensuse 11.0 和 11.1 的 emacs 上使用相同的东西,没有一个问题。

谢谢。

4

1 回答 1

1

问题是某些东西试图调用未定义的函数'php-template-if-hook

如果您提供了指向php-mode.el您正在使用的位置的链接,这将很有用,因为似乎有几个.

该符号'php-template-if-hook不是php-mode.elon sourceforge 的一部分,因此您要么有不同的版本,要么 .emacs 中有其他东西导致了问题。看起来好像有什么东西触发了导致 ' 的缩写插入php-template-if-hook注意: 看起来堆栈溢出的人正在使用 sourceforge 的 php 模式,所以我建议移到那个模式。

一个快速的谷歌搜索发现这个php-mode.el,它定义'php-template-if-hook为:

(defun php-template-if ()
  "Insert an if statement."
  (interactive)
  (let ((start (point)))
    (insert "if ")
    (insert "(") ; +
    (when (php-template-field "condition" nil t start (point))
      (insert ") {") ; +
      (newline-and-indent)
      (setq start (point-marker))
      (insert "\n}")
      (php-indent-line-2)
      (goto-char start))))

但是,通过从 intertubes 剪切/粘贴随机代码来解决您的问题并不是一个好的长期解决方案。

于 2009-11-18T17:58:00.663 回答