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

Posted

技术标签:

【中文标题】如何在 emacs 启动时默认启用非全局次要模式?【英文标题】:How to enable a non-global minor mode by default, on emacs startup? 【发布时间】:2013-04-09 12:26:26 【问题描述】:

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

我猜我在 .emacs 文件中放了一些命令。

我尝试了以下所有方法,但都没有奏效:

(require 'rainbow-mode)   

(rainbow-mode initialize)

(global-rainbow-mode)

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

【问题讨论】:

【参考方案1】:

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

我只将它用于 CSS,所以我有:

(add-hook 'css-mode-hook 'my-css-mode-hook)
(defun my-css-mode-hook ()
  (rainbow-mode 1))

如果您真正希望它是全局的,无处不在,您可以轻松地自己定义一个全局次要模式:

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

(my-global-rainbow-mode 1)

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


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

它可能会有所不同,但我展示的方法足以满足大多数次要模式:您希望在启用 MODE 时启用它们(作为特定的其他模式名称),在这种情况下,您可以使用 @987654328根据css-mode-hook 示例,@ 变量(始终可用);或者您希望永久启用该模式,在这种情况下,全局次要模式是一种好方法(因为您可以全局打开和关闭它)。一些次要模式默认是全局的(或提供全局变体),但您可以根据my-global-rainbow-mode 示例创建自己的模式。

还要注意,模式可以派生自其他模式,在这种情况下,all 相关的MODE-hook 挂钩将运行(详情请参阅https://***.com/a/19295380/324105)。一个常见的用例是使用prog-mode-hook所有从它派生的编程模式(这是大多数编程模式)启用所需的功能。

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

【讨论】:

您可以直接执行(add-hook 'css-mode-hook 'rainbow-mode),而无需通过my-css-mode-hook Stefan:仅在 Emacs 24 中,否则会切换模式,我不倾向于假设每个人都升级了。 (在我的例子中,这个函数还做了很多其他的事情,所以我确实需要它:) 谢谢!我用它来全局启用 goto-address-mode 。最后,我输入了.emacs:(define-globalized-minor-mode global-goto-address-mode goto-address-mode (lambda () (goto-address-mode 1))),然后在检查模式的配置时偶然发现了customize上的值,所以最后我让全局模式激活由customize处理。 我在 spacemacs(全球解决方案)中使用了您的解决方案,它删除了我的颜色主题。我现在无法启用它 :( 如何撤消此定义?如何取消定义全球化次要模式? @ashrasmun,这个问题对我来说毫无意义(除非您可能根本没有安装rainbow-mode),但您可以使用M-x my-global-rainbow-mode 关闭全局模式或评估@987654339 @,之后它不会做任何事情。

以上是关于如何在 emacs 启动时默认启用非全局次要模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Emacs 中的次要模式键盘映射中删除键?

如何定义键绑定以在 emacs 中的次要模式之间切换?

大纲次要模式和组织模式

Emacs:全局启用空白模式

在 Emacs 中全局覆盖键绑定

运行 emacs 时将自动填充模式作为次要模式打开