如何知道 emacs 真实模式名称?

How to know emacs true mode names?

有时我会将配置选项从 Internet 复制到我的 .emacs。有时它们不起作用。

(add-hook 'laTeX-mode-hook 'turn-on-flyspell)

无效:

(add-hook 'LaTeX-mode-hook 'turn-on-flyspell)

(注意 Latex 中的大写字母)。但是,

(add-hook 'flyspell-mode-hook 'flyspell-buffer)

是正确的。虽然 Emacs 在下栏中显示 "Fly" 并且 M-: major-mode 显示乳胶模式而不是乳胶模式。

我怎么知道如何写 emacs 模式名称?

听起来您实际上对模式的 挂钩变量 的名称比对模式本身更感兴趣。

您有多种选择。我会根据发现 flyspell-mode-hook:

提出一些建议
  • M-x apropos-variable RET flyspell RET,然后在结果缓冲区中搜索 hook
  • C-h v flyspell-,然后制表完成
    • 在迷你缓冲区中的任何时候,tab 补全都是一个很好的尝试
  • M-x find-function flyspell-mode RET 将打开 flyspell 的源代码,然后您可以搜索 hook
  • 如果您已将 Emacs 配置为为 Emacs Lisp 提供补全,您只需键入

    (add-hook 'flyspell-
    

    进入您的 .emacs 缓冲区并让 Emacs 建议有效完成

  • Helm and ido这样的工具可以简化找东西的过程

find-function 技术与 latex-mode 结合使用(我用 Tab 键完成),我发现我的 Emacs 版本调用了它的 LaTeX 模式函数 latex-mode。搜索 LaTeX- 显示 LaTeX-modelatex-mode.

的别名

您对 M-: major-mode 的使用很好,并为您提供了正确的主模式名称(即模式功能的符号名称)。

我不相信有一个标准函数可以列出当前缓冲区启用的次要模式的符号名称,但您可以看到 all (loaded) 次要模式符号 C-hv minor-mode-list,因此如果您发现需要,验证名称并不难。

模式的 挂钩 的符号名称实际上是带有后缀 -hook.

的模式符号名称

Minor 模式还有(另外)-on-hook-off-hook.

钩子变量在不使用时不一定存在,但是这个命名是硬编码在用于定义模式的标准宏中(并且 运行 在适当的时候它们的钩子);并且不使用这些宏的模式总是遵循相同的约定,以确保一致性。