【问题标题】:Emacs23 php-mode problemEmacs23 php-mode问题
【发布时间】:2009-11-18 12:53:24
【问题描述】:

在 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 上使用相同的东西,没有任何问题。

谢谢。

【问题讨论】:

    标签: php emacs elisp php-mode


    【解决方案1】:

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

    如果您提供指向您正在使用的php-mode.el 的链接会很有用,因为似乎有several

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

    通过 Google 快速搜索发现此 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 中剪切/粘贴随机代码来解决您的问题并不是一个好的长期解决方案。

    【讨论】:

    • 我已经用必要的信息更新了这个问题。从那以后,我将我拥有的 php-mode.el 与一个定义了所有这些功能的 php-mode.el 合并,到目前为止它似乎工作正常,到处都有一些问题。我不知道的是,为什么我似乎是唯一一个有这个问题的人,即使使用 emacs22,而且它只在 Ubuntu Karmic 中,我在 opensuse 11.0 和 11.1 上的 emacs 上使用相同的东西,没有一个问题。
    • 很有可能,您在 opensuse 上使用的 Emacs 捆绑了不同的东西。最初的错误是因为未定义函数。它不是 Emacs 的一部分(无论操作系统如何),因此有人在两个系统上安装了不同的支持库。
    • 我想。我什至尝试用 source forge 的模式更改 cc 模式,看看会发生什么,但仍然出现相同的错误。我对 Elisp 不太熟悉,否则我会选择调试底层系统,所以它不必调用未定义的函数,或者不会像 opensuse 那样引发错误.不管怎样,问题现在已经解决了。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多