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

11

当遇到相关文件扩展名时,懒加载模式是否有最佳实践?

目前我安装了大约25种不同的Emacs模式,启动速度变慢了。例如,尽管随时准备使用clojure-mode很棒,但我很少使用它,除非打开扩展名为.clj的文件,否则我想避免加载它。这样的“懒加载”功能似乎是一般模式配置的正确方式。

我在网上没有找到任何信息,所以我自己试着解决了。

与其使用:

(require 'clojure-mode)
(require 'tpl-mode) 

我有这个:

(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)

这看起来是可以工作的(我是一个elisp新手,所以欢迎评论!),但是我对于在网上找不到任何关于这个主题的资料感到不安。这种方法合理吗?


这似乎可行(我是 Elisp 新手,欢迎评论!),但是我担心在网上找不到关于此主题的任何信息。这种方法是否合理?
2个回答

17
你想要的设施被称为autoloadingclojure-mode.el源文件中包含有关如何安排此功能的注释:
;; 将以下行添加到您的.emacs文件中:
;;   (autoload 'clojure-mode "clojure-mode" "A major mode for Clojure" t)
;;   (add-to-list 'auto-mode-alist '("\\.clj$" . clojure-mode))

2
还要注意许多软件包提供自动加载功能;有内置机制可以从你安装的库中获取像Sean提供的代码。此外,如果你使用package.el从ELPA或Marmalade安装软件包,则自动加载将自动为你设置。 - sanityinc
太好了,完全没注意到。谢谢! - Rob

3
这是一种方法,
(provide 'my-slime)
(eval-after-load "slime"
  '(progn
     (setq slime-lisp-implementations
           '((sbcl ("/usr/bin/sbcl"))
             (clisp ("/usr/bin/clisp")))
           common-lisp-hyperspec-root "/home/sujoy/documents/hyperspec/")
     (slime-setup '(slime-asdf
                    slime-autodoc
                    slime-editing-commands
                    slime-fancy-inspector
                    slime-fontifying-fu
                    slime-fuzzy
                    slime-indentation
                    slime-mdot-fu
                    slime-package-fu
                    slime-references
                    slime-repl
                    slime-sbcl-exts
                    slime-scratch
                    slime-xref-browser))
     (slime-autodoc-mode)
     (setq slime-complete-symbol*-fancy t)
     (setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))))

(require 'slime)

随着,
;; slime mode
(autoload 'slime "my-slime" "Slime mode." t)
(autoload 'slime-connect "my-slime" "Slime mode." t)

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