首页 > 解决方案 > 我什么时候应该使用`require`一个`autoload`的包?

问题描述

例如,evil 是 autoload

一些博客/线程将使用

(require 'evil)
(evil-mode 1)

启用邪恶模式。

AFAIK,Elisp 是 lisp2,evil-mode也是一个函数,所以不需要setq.

(defadvice evil-mode (after start-evil activate)
  "Enable Evil in Fundamental mode."
  (if evil-mode
      (progn
        (when (eq (default-value 'major-mode) 'fundamental-mode)
          ;; changed back by `evil-local-mode'
          (setq-default major-mode 'turn-on-evil-mode))
        (ad-enable-regexp "^evil")
        (ad-activate-regexp "^evil")
        (with-no-warnings (evil-esc-mode 1)))
    (when (eq (default-value 'major-mode) 'turn-on-evil-mode)
      (setq-default major-mode 'fundamental-mode))
    (ad-disable-regexp "^evil")
    (ad-update-regexp "^evil")
    (with-no-warnings (evil-esc-mode -1))))

但是,因为autoload

(evil-mode 1)

没有require,它也可以正常工作(至少对我来说)

(以下如有错误请指正,谢谢)

我的问题是,require如果需要的包是自动加载的,我什么时候必须使用

标签: emacsrequireautoloadevil-mode

解决方案


你是对的——如果一个autoload声明evil-mode已经被评估,那么就没有必要(require 'evil)先于(evil-mode 1)

个人用户可能需要也可能不需要(require 'evil)。这是如何安装库的问题。;;;###autoloadcookie 本身什么也不做;但是如果您evil使用 package.el 安装,那么它们将被解析并转换为autoload声明文件,Emacs 将在初始化包时加载该文件。

如果您在不使用包管理器的情况下安装库,那么您可能需要require它,或者autoload为您可能正在调用的函数编写自己的声明。


推荐阅读