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は、 nxhtmlのバージョンをバンドルしたemacsスターターキットからのものです。php-mode-1.5.0を使用してみましたが、まだ成功しません。最新バージョンのnxhtml(2.2)を使用してみましたが、それでも同じエラーが発生しました。mewdeが比較的健全に機能するためには、 mewdeにないすべての関数定義をコピーして貼り付ける必要がありました。私はそれがいくつかの価値を追加すると言わなければなりません。:)

面白いことに、この問題は私にとってはUbuntu Karmicだけの問題のようです。私は、opensuse11.0と11.1のemacsで同じものを1つの問題なしに使用していました。

ありがとう。

4

1 に答える 1

1

問題は、何かが未定義の関数を呼び出そうとしていることです'php-template-if-hook

php-mode.el使用しているを見つけた場所へのリンクを提供すると便利です。

シンボル'php-template-if-hookは sourceforge の一部ではないphp-mode.elため、別のバージョンを使用しているか、問題を引き起こしている .emacs に何か他のものがあります。何かが ' につながる略語の挿入をトリガーしているように見えますphp-template-if-hook注:スタック オーバーフローの人は、sourceforge の php モードを使用している ようです。そのため、そちらに移行することをお勧めします。

Google ですばやく検索すると、次のようphp-mode.elに定義された this が見つかり'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))))

しかし、インターチューブからランダムなコードを切り取って貼り付けることで問題を解決することは、長期的な解決策にはなりません。

于 2009-11-18T17:58:00.663 に答える