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

8

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

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

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

(load "auctex.el" nil t t)
(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функциональность для повышения производительности?

студент
источник

Ответы:

4

В качестве первого шага к автозагрузке я бы предложил вам преобразовать ваши явные 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.

rbrito
источник
1

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

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

умебоши
источник