如何在emacs中添加php模式挂钩

如何在emacs中添加php模式挂钩,php,emacs,Php,Emacs,我有一个emacs模式钩子代码 (defun php-mode-hook () (setq tab-width 4 c-basic-offset 4 c-hanging-comment-ender-p nil indent-tabs-mode (not (and (string-match "/\\(PEAR\\|pear\\)/" (buffer-file-name))

我有一个emacs模式钩子代码

(defun php-mode-hook ()
  (setq tab-width 4
        c-basic-offset 4
        c-hanging-comment-ender-p nil
        indent-tabs-mode
          (not
            (and (string-match "/\\(PEAR\\|pear\\)/" (buffer-file-name))
              (string-match "\.php$" (buffer-file-name))))))
我需要确保在emacs中打开php文件时调用此函数。。 我已经为emacs安装了php模式,并在.emacs文件中添加了此代码,但它似乎不起作用。。谁能告诉我如何为emacs添加这样的定制代码

注意:我最近已迁移到emacs。。回答时请更具描述性:)

更新代码1

(add-hook 'php-mode-hook
   '(lambda()
     (setq tab-width 4
      c-basic-offset 4
      c-hanging-comment-ender-p nil
      indent-tabs-mode
      (not
       (and (string-match "/\\(PEAR\\|pear\\)/" (buffer-file-name))
            (string-match "\.php$" (buffer-file-name)))))))

将钩子添加到各种模式提供的位置通常使用
addhook
功能工作。您使用要使用的钩子的名称定义了一个函数。相反,您应该使用另一个名称定义一个函数,将
addhook
添加到
php模式钩子中:

(defun my-php-settings ()
  ...)

(add-hook 'php-mode-hook 'my-php-settings)
事实上,您甚至不需要创建命名函数:

(add-hook 'php-mode-hook
          (lambda ()
            (setq tab-width 4 ...)))

嗨,拉福!谢谢你的回复!我已经按照你告诉我的准则更新了代码。。但它似乎仍然不起作用。我哪里出了问题吗?我被要求将上面的代码添加到emacs中,以便遵循PHP PEAR准则,我还没有对其进行编码。。我也不懂口齿不清|首先,没有必要引用lambda。再看看我给你的例子。还有,它怎么不起作用呢?它整天坐在沙发上吗?它会对你做鬼脸吗?;-)如果没有收到任何错误消息,您可能首先要检查钩子是否已执行。您可以通过使其执行
(消息“hook called”)
并在
*消息*
缓冲区中检查其外观来完成此操作。耶!胡克被处决了。。但我无法从钩子中看到预期的行为。。当我打开一个php文件并发布tab时,tab width为0,而预期为4。虽然您不需要命名函数,但在您进行实验时,最好有一个命名函数,因为这样您只需要在更改代码时重新评估函数定义。使用lambda表达式时,您需要
删除原始表达式上的钩子
,然后修改代码,然后使用新表达式再次添加钩子(或者通过执行钩子代码的所有以前修订版来冒潜在问题)。