比如我在里面放了一些代码python-mode-hook
,这些代码会在以下情况下运行:
(1) 每次打开一个python文件*.py
(2) 只有第一次python-mode
被触发
有谁知道哪个答案是正确的?
谢谢!
没有关于钩子何时运行的一般规则:这仅由定义钩子的代码控制。但是,有遵循的一般约定,其中之一是:
foo-mode
是某种主要模式,则foo-mode-hook
每次foo-mode
在缓冲区中启用时都会运行。特别是,正如已经指出的那样,python-mode-hook
每次.py
加载文件时都会运行函数。
如果您想查看代码,请注意绝大多数主要模式都是用define-derived-mode
宏构造的(如果新模式实际上不是从另一个模式派生的,模式可以简单地提供,以便仍然获得相同的nil
好处和使用宏的标准行为)。parent
所以M-x find-function
RET define-derived-mode
RET
您将看到调用模式时发生的最后一件事是(run-mode-hooks ',hook)
(,hook
在本例中将扩展为带有-hook
后缀的模式名称)。
因此,每次缓冲区启用该模式时(意味着执行该宏定义的模式函数),该模式的钩子也会运行(以及任何父/祖先模式的钩子——有趣delay-mode-hooks
和run-mode-hooks
交互意味着没有钩子一直运行,直到所有其他处理完成)。
每次打开 python 文件时它都会运行。
然后将为此文件缓冲区触发 python 模式并执行您的钩子。
你可以通过编写一个简单的钩子来轻松地测试它:
(add-hook 'python-mode-hook (lambda () (message "python mode hook")))