3

比如我在里面放了一些代码python-mode-hook,这些代码会在以下情况下运行:

(1) 每次打开一个python文件*.py

(2) 只有第一次python-mode被触发

有谁知道哪个答案是正确的?

谢谢!

4

3 回答 3

6

没有关于钩子何时运行的一般规则:这仅由定义钩子的代码控制。但是,有遵循的一般约定,其中之一是:

  • 如果foo-mode是某种主要模式,则foo-mode-hook每次foo-mode在缓冲区中启用时都会运行。

特别是,正如已经指出的那样,python-mode-hook每次.py加载文件时都会运行函数。

于 2012-10-30T06:47:20.510 回答
4

如果您想查看代码,请注意绝大多数主要模式都是用define-derived-mode宏构造的(如果新模式实际上不是另一个模式派生的,模式可以简单地提供,以便仍然获得相同的nil好处和使用宏的标准行为)。parent

所以M-x find-function RET define-derived-mode RET

您将看到调用模式时发生的最后一件事是(run-mode-hooks ',hook),hook在本例中将扩展为带有-hook后缀的模式名称)。

因此,每次缓冲区启用该模式时(意味着执行该宏定义的模式函数),该模式的钩子也会运行(以及任何父/祖先模式的钩子——有趣delay-mode-hooksrun-mode-hooks交互意味着没有钩子一直运行,直到所有其他处理完成)。

于 2012-10-30T07:43:27.420 回答
3

每次打开 python 文件时它都会运行。

然后将为此文件缓冲区触发 python 模式并执行您的钩子。

你可以通过编写一个简单的钩子来轻松地测试它:

(add-hook 'python-mode-hook  (lambda () (message "python mode hook")))
于 2012-10-30T05:53:54.483 回答