Заменить требуемые утверждения автозагрузкой в ​​файле .emacs для повышения производительности

Согласно этим сообщениям:

  • Как ускорить запуск emacs
  • a-nickels-worth.blogspot.de/effective emacs

можно каким-то образом заменить инструкции require и load в файле .emacs чтобы ускорить запуск emacs. Однако я не знаю, как это сделать подробно.

Например, у меня есть (среди прочего) в моем файле .emacs следующие инструкции require и load :

 (load "auctex.el" nil tt) (require 'alarm) (require 'linked) (load "nxhtml/autostart.el") (require 'autoinsert) (require 'recentf) (require 'color-theme) (load "~/.emacsaddons/emacs-color-theme-solarized/color-theme-solarized") ... 

Для alarm и linked есть соответствующие файлы в каталоге с именем .emacsaddons , для nxhtml есть каталог, для остальных нет соответствующих файлов в .emacsaddons . В приведенном выше примере я не включал все require или инструкции load из моего файла .emacs , только некоторые из них, где я чувствую, что шаги для их замены autoload будут отличаться между ними (например, поскольку некоторые из них имеют файлы el unter .emacsaddons и некоторые нет, или потому, что nxhtml является .emacsaddons …).

Как подробные шаги по замене всех функций autoload для повышения производительности?

В качестве первого шага к автозагрузке я бы предложил вам преобразовать ваши явные команды load с путями, добавленными к списку вещей, которые emacs должен загружать, например:

 (add-to-list 'load-path (expand-file-name "~/.emacs.d/")) 

С этим в верхней части ваших .emacs вы можете вызвать другие вещи, которые зависят от загрузки других файлов, чтобы они были найдены.

В частности, для откладывания файлов загрузки для каждого (require 'foo) который у вас есть в вашем .emacs , вы должны заменить его чем-то похожим на:

 (autoload 'name-of-foo-mode "code-for-foo.el" "Minor/Major mode for foo" t) 

Возможно, вам придется поэкспериментировать (возможно, прочитать) код соответствующего файла .el чтобы узнать, какое имя вы должны ввести вместо 'name-of-foo-mode . Наиболее распространенными являются 'foo или 'foo-mode , но есть несогласованность.

В моем случае у меня есть эти объявления, близкие к нижней части моего .emacs :

 (autoload 'textmate-mode "textmate" "Minor mode for automatic bracket pairs" t) (autoload 'post-mode "post" "Mode for editing e-mails" t) (autoload 'turn-on-reftex "reftex" "Minor mode for references in TeX files" t) (autoload 'mode-compile "mode-compile" "Compile current buffer" t) (autoload 'markdown-mode "markdown-mode" "Major mode for Markdown files" t) 

но некоторые из заявлений, которые я должен был require до того, как я перешел на автозагрузку, были:

 (require 'reftex) (require 'post) (require 'compile) (require 'textmate) 

Итак, как я уже сказал, вам, возможно, придется немного поэкспериментировать или читать код, но, в конце концов, это того стоит, так как это сэкономит вам время, если вы часто вызываете emacs.

Лучший способ, который я нашел, чтобы получить emacs, начался быстро, – это демонзировать процесс. Эти инструкции относятся к emacs23. Предыдущие версии имеют возможности сервера / клиента, но его сложнее настроить. Когда я впервые вхожу на свой рабочий стол, я emacs --daemon . После этого каждый раз, когда мне нужно emacs, я emacsclient -c filename и он появляется мгновенно. При использовании emacs в режиме server / client вам нужно нарушить привычку использовать Cx Cc для выхода, вместо этого набрав Cx # . FWIW, это то, что emacs23, кажется, исправляет, поскольку я иногда поймал себя, набрав Cx Cc не убив серверный процесс, но я все еще придерживаюсь своих старых привычек.

В зависимости от ваших требований это может работать лучше, чем манипулировать вашей конфигурацией для небольшого выигрыша.