Emacs:.emacs中延迟加载模式的最佳实践?

Rob*_*Rob 10 emacs clojure dot-emacs

遇到相关文件扩展名时,是否有关于延迟加载模式的最佳做法?

此时我安装了大约25种不同的Emacs模式,启动变慢.例如,尽管准备好clojure模式很棒,但我很少使用它,除非我打开扩展名为.clj的文件,否则我想避免加载它.这种"懒惰的需求"功能似乎是正确的模式配置方式.

我在网上找不到任何东西,所以我自己也搞砸了.

代替:

(require 'clojure-mode)
(require 'tpl-mode) 
Run Code Online (Sandbox Code Playgroud)

我有这个:

(defun lazy-require (ext mode)
  (add-hook
   'find-file-hook
   `(lambda ()
      (when (and (stringp buffer-file-name)
                 (string-match (concat "\\." ,ext "\\'") buffer-file-name))
        (require (quote ,mode))
        (,mode)))))

(lazy-require "soy" 'soy-mode)
(lazy-require "tpl" 'tpl-mode)
Run Code Online (Sandbox Code Playgroud)

这似乎工作(我是一个elisp新手,所以欢迎评论!),但我对在网上找不到关于这个主题的书面感到不安.这是一种合理的方法吗?

Sea*_*ean 16

您想要的设施称为自动加载.在clojure-mode源文件,Clojure的-mode.el,包括如何安排这样的评论:

;;     Add these lines to your .emacs:
;;       (autoload 'clojure-mode "clojure-mode" "A major mode for Clojure" t)
;;       (add-to-list 'auto-mode-alist '("\\.clj$" . clojure-mode))

  • 另请注意,许多软件包都提供自动加载; 有一些内置的机制可以收集Sean从您安装的库中提供的代码.此外,如果您使用package.el从ELPA或Marmalade安装软件包,则会自动为您设置自动加载. (2认同)