Как я могу ускорить запуск Emacs? - PullRequest
67 голосов
/ 22 апреля 2009

Я использую Emacs v. 22 (консольная версия, удаленно с PuTTY или локально с Konsole ) в качестве основного текстового редактора в Linux. Загрузка занимает некоторое время каждый раз, когда я запускаю его, хотя, вероятно, почти секунду, хотя я никогда не рассчитывал это. Я часто открываю и закрываю Emacs, потому что мне удобнее использовать командную строку Bash для манипулирования файлами / каталогами и компиляции.

Как я могу ускорить время запуска?

Ответы [ 17 ]

5 голосов
/ 02 мая 2014

Вы можете использовать benchmark-init для профилирования вашего запуска Emacs. Он будет отслеживать, какие модули загружаются и сколько времени уходит на каждый из них. Результаты могут быть представлены в виде таблицы или в виде дерева. Дерево упрощает отслеживание того, кто что загружает, что может быть полезно, когда вы загружаете пакет с большим количеством зависимостей, а табулированная форма помогает вам быстро найти, где тратится большая часть времени.

Получив эти результаты, постарайтесь выяснить, нужно ли загружать все модули постоянно или, возможно, вы можете загрузить некоторые из них по требованию. Например, в моей конфигурации я загружаю только расширения Emacs, которые характерны для определенных режимов, когда этот режим фактически активирован, так как большую часть времени я использую только небольшое их подмножество в сеансе. eval-after-load и ловушки режима будут вашими друзьями здесь.

Применяя этот метод , мой Emacs запускается через 3-4 секунды , и у меня близко к 200 расширениям . Большую часть времени тратится на загрузку Helm, который я всегда загружаю, поскольку он заменяет find-file и другие функции ядра, которые всегда нужны, и CEDET, поскольку я использую последнюю версию, и ее необходимо загрузить, прежде чем Emacs попытается загрузить более старую встроенная версия.

4 голосов
/ 03 апреля 2016

У меня было время запуска около 120 секунд. Я смог найти исправление, устанавливающее это:

https://github.com/dholm/benchmark-init-el положить поверх вашего init.el

(let ((benchmark-init.el "~/.emacs.d/el-get/benchmark-init/benchmark-init.el"))
  (when (file-exists-p benchmark-init.el)
    (load benchmark-init.el)))

затем, как только ваш emacs запустится, запустите:

M-x бенчмарк-init / show-durations-tree

С моей стороны проблема была в 127 секунд в tramp-loaddefs

Я исправил это, добавив

127.0.0.1  host.does.not.exist

до / etc / hosts и это ускорило мой запуск

подробнее здесь: https://github.com/emacs-helm/helm/issues/1045

еще одна вещь, которая может быть полезна для вас: https://www.emacswiki.org/emacs/ProfileDotEmacs

4 голосов
/ 23 апреля 2009

Одна вещь, которую другие не упомянули, - это включение библиотек elisp, которые вы используете как часть дампа Emacs , чтобы перенести время загрузки библиотеки из запуска Emacs в сборку Emacs. Это не для слабонервных, но если вы загрузите несколько библиотек в .emacs, это может выиграть несколько секунд времени запуска.

3 голосов
/ 17 марта 2015

Попробуйте использовать макрос https://github.com/jwiegley/use-package для определения загрузки вашего пакета и настроек. Он обрабатывает отложенную загрузку пакетов для вас, что позволяет относительно легко получить хорошее время запуска даже при наличии большого количества настроенных пакетов. У меня почти 100 пакетов, на которые есть ссылки в моем .emacs, но мое время запуска составляет менее 2 секунд в Linux и 2,2 секунды на Mac.

3 голосов
/ 22 апреля 2009

Это не отвечает на вопрос, но является уместным

Я не знаю, как заставить его запускаться быстрее, но я бы мог предложить несколько вещей:

  • для большинства вещей, которые вы делаете в командной строке, вы можете сделать это в emacs:

    • compile: M-x compile, затем введите команду, которую вы используете
    • мой опыт только с C ++, но с g ++ вы можете нажать C-x `, чтобы перейти к строкам, на которые жалуется компилятор
    • запуск команд оболочки: M- !, выводит вывод в буфер
    • интерактивная оболочка: M-x shell
  • альтернативно, вы можете запустить emacs так:

    • emacs file.ext &
    • , который открывает emacs в фоновом режиме, так что вы все равно можете использовать оболочку (лучше всего работает с putty и X forwarding с чем-то вроде Xming)
2 голосов
/ 22 октября 2014

Я пытался решить ту же проблему, когда столкнулся с этим вопросом здесь. Я просто хотел добавить, что проблема для меня была не в времени загрузки пакетов emacs lisp, а в том, что у хоста не было полностью разрешенного имени хоста

Чтобы проверить время загрузки вашего пакета, сделайте

M-x emacs-init-time

Для меня это было 0,3 секунды, и все же время загрузки было чрезвычайно высоким. После корректного изменения имени хоста проблема была устранена.

Чтобы настроить полностью разрешенное имя хоста, отредактируйте / etc / hostname и / etc / hostsfile с помощью:

127.0.0.1       localhost localhost.localdomain
192.168.0.2   hostname hostname.domain
1 голос
/ 22 апреля 2009

Мне нужно проверить настройки, но есть пакет, называемый gnuserve или emacsclient. Он много мигрирует, поэтому вам придется поискать его в Google.

Он запускает один сеанс Emacs в фоновом режиме. Любые дальнейшие сессии emacs - это просто новые кадры этой сессии. Один совет - быстрое время запуска для ваших последующих сессий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...