如何在emacs启动时默认启用非全局次要模式?

Dar*_*ght 37 emacs mode

我希望rainbow-mode每次启动emacs时启用,而不是必须使用M-x rainbow-mode.

我想我的.emacs文件中有一些命令.

我尝试了以下所有方法,但没有一个有效:

(require 'rainbow-mode)   

(rainbow-mode initialize)

(global-rainbow-mode)
Run Code Online (Sandbox Code Playgroud)

更一般地,我怎么在启动时自动加载任何模式/包?

phi*_*ils 42

rainbow-mode 不是全局次要模式,因此需要在每个缓冲区的基础上启用它.

我只用它来做CSS,所以我有:

(add-hook 'css-mode-hook 'my-css-mode-hook)
(defun my-css-mode-hook ()
  (rainbow-mode 1))
Run Code Online (Sandbox Code Playgroud)

如果您真的希望它在全球范围内,无处不在,您可以自己轻松定义全局次要模式:

(define-globalized-minor-mode my-global-rainbow-mode rainbow-mode
  (lambda () (rainbow-mode 1)))

(my-global-rainbow-mode 1)
Run Code Online (Sandbox Code Playgroud)

您可以向该(lambda () (rainbow-mode 1))函数添加任意逻辑(将在每个缓冲区中进行评估),以决定是否实际调用(rainbow-mode 1)给定的缓冲区,因此如果您对elisp感到满意,那么您可以轻松地扩展此方法以覆盖您对相关模式的具体要求.


更一般地,我怎么在启动时自动加载任何模式/包?

它可能会有所不同,但我所展示的方法对于大多数次要模式都是足够的:要么只要MODE启用它们就要启用它们(是一些特定的其他模式名称),在这种情况下你可以使用MODE-hook变量(它总是可用的)按照css-mode-hook例子; 或者您希望永久启用模式,在这种情况下,全局次模式是一种很好的方法(因为您可以全局打开和关闭它).默认情况下,某些次要模式是全局的(或提供全局变体),但如果需要,您可以根据my-global-rainbow-mode示例创建自己的模式.

另请注意,模式可以从其他模式派生,在这种情况下,将运行所有相关的MODE-hook挂钩(有关详细信息,请参阅/sf/answers/1350676631/).一个常见的用例是用于prog-mode-hook启用从它派生的所有编程模式所需的功能(这是大多数编程模式).

请记住,许多(希望是大多数)库和包将提供使用说明.如果找不到文档,请务必尝试M-x find-library访问库文件,然后阅读顶部的注释.通常有一个非常有用的"评论"部分,有时这是最终用户文档的主要来源,并解释了如何启用其功能.

  • 您可以直接执行`(add-hook'css-mode-hook'cunig-mode)`而不需要通过`my-css-mode-hook`. (11认同)
  • Stefan:仅在Emacs 24中,否则切换模式,我不倾向于认为每个人都已升级.(在我的情况下,该功能也做了很多其他的事情,所以我确实需要它:) (3认同)
  • 谢谢!我用它来全局启用 goto-address-mode。最后,我放入了 .emacs: `(define-globalized-minor-mode global-goto-address-mode goto-address-mode (lambda () (goto-address-mode 1)))` 然后不小心在检查模式的配置时发现了customize上的值,所以最后我让全局模式激活由customize处理。 (2认同)