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

47

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

我想在我的 .emacs 文件中放置一些命令。

我尝试了以下所有方法,但都没有成功:

(require 'rainbow-mode)   

(rainbow-mode initialize)

(global-rainbow-mode)

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


特别提醒彩虹模式:全局启用彩虹模式会在至少一些新创建的缓冲区中出现问题,导致如果您将该模式切换关闭,颜色命名文本的背景将出现错误(我在通过Eat提供的正确终端仿真增强的Eshell缓冲区中观察到这一点,不确定是否普遍存在;对我来说,这已经足够麻烦,所以我选择默认关闭它,并为其设置了一个按键绑定来切换)。 - undefined
1个回答

52

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(某个特定的其他模式名称)时启用它们,这种情况下,你可以像css-mode-hook示例一样使用MODE-hook变量(它始终可用);或者你想永久启用模式,这种情况下全局小模式是一个不错的选择(因为你可以在全局范围内切换它的开关)。有些小模式默认是全局的(或提供全局变体),但如果必要,你可以创建自己的全局小模式,就像my-global-rainbow-mode一样。
还要注意,模式可以从其他模式派生出来,这种情况下,将运行所有相关的MODE-hook钩子(有关详细信息,请参见https://dev59.com/GXfZa4cB1Zd3GeqPV8zl#19295380)。常见用例是使用prog-mode-hook为从中派生的所有编程模式启用所需功能(大多数编程模式都是从它派生的)。
请记住,许多(希望大多数)库和软件包都提供使用说明。如果找不到文档,请尝试M-x find-library以访问库文件,然后阅读顶部的注释。通常会有一个非常信息丰富的“评论”部分,有时这是最主要的终端用户文档来源,并解释如何启用其功能。

11
你可以直接使用(add-hook 'css-mode-hook 'rainbow-mode)而无需通过my-css-mode-hook - Stefan
3
Stefan说:只有在Emacs 24中使用,否则它会切换模式,而我不想假设每个人都已经升级。(在我的情况下,该函数还执行了许多其他操作,所以我确实需要它 :) - phils
2
谢谢!我用这个来全局启用goto-address-mode。最后,我在.emacs中加入了(define-globalized-minor-mode global-goto-address-mode goto-address-mode (lambda () (goto-address-mode 1))),然后无意中在检查模式配置时在customize中找到了该值,因此最终我让全局模式激活由customize处理。 - pupitetris
我在spacemacs(全局)中使用了您的解决方案,它删除了我的颜色主题。现在我无法启用它 :( 如何撤消此定义?如何取消全局化的小模式定义? - ashrasmun
1
@ashrasmun,这个问题对我来说没有意义(除非你根本没有安装 rainbow-mode),但是你可以使用 M-x my-global-rainbow-mode 切换全局模式或者评估 (my-global-rainbow-mode 0),之后它就不会做任何事情了。 - phils
@phils 我也不理解,就像在emacs中的许多事情一样,但这只是我作为初学者spacemacs用户遇到的问题之一。感谢您提供有关此事的其他信息 - 我希望其他人也能从中受益! - ashrasmun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接