什么时候应该使用“需要”一个名为“自动加载”的软件包?

时间:2018-07-14 01:28:15

标签: emacs elisp require autoload evil-mode

例如evil is 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

1 个答案:

答案 0 :(得分:4)

您是正确的-如果已经评估了autoload的{​​{1}}声明,那么就不需要在evil-mode之前(require 'evil)

尽管如此,个人用户可能不需要(evil-mode 1)。这是关于如何安装库的问题。 (require 'evil) cookie本身不执行任何操作;但是如果您使用package.el安装了;;;###autoload,那么它们将被解析并变成evil声明文件,Emacs将在初始化程序包时加载它们。

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