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

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

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

Ответы [ 17 ]

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

Другие уже использовали gnuserve и emacsclient, и я бы предложил компиляцию в emacs (возможность перехода к ошибкам компиляции - это победа).

Но, в частности, ускорение .emacs может быть сделано:

  1. Байт, компилирующий файл .emacs, который вы можете сделать автоматически, используя этот фрагмент кода

  2. Замена всех операторов (require 'package) функциональностью autoload ed. Это задержит загрузку lisp до тех пор, пока это действительно не потребуется. Использование этой техники позволило мне ускорить мой запуск с> 6 секунд до <1. Это займет немного работы, потому что не все библиотеки имеют правильную маркировку <code>autoload.

  3. Удаление кода / функциональности, которую вы больше не используете.

  4. Попробуйте запустить emacs с опцией --no-site-file, чтобы избежать загрузки ненужных пакетов при установке сайта site-start.el.

  5. Если вы действительно серьезны, вы можете свернуть свои собственные emacs с уже загруженными вашими любимыми функциями. Это, конечно, означает, что более важно вносить изменения в то, что у вас есть в .emacs, потому что это часть двоичного файла. Перейдите по ссылке для получения информации о том, как использовать dump-emacs.

  6. Купите более быстрый компьютер и / или более быстрый диск.

Как определить, что загружает ваш .emacs

Теперь, как вы узнаете, что загружает ваш .emacs? С целью убрать функционал или отложить его? Проверьте ваш *Messages* буфер, который содержит строки вроде:

Loading /home/tjackson/.emacs.tjackson.el (source)...
Loading /home/tjackson/installed/emacs/lisp/loaddefs.el (source)...done
Loading /user/tjackson/.elisp/source/loaddefs.el (source)...done
Loading autorevert...done
Loading /home/tjackson/.emacs.tjackson.el (source)...done

Если вы заметите, операторы Loading могут быть вложенными: первая .emacs.tjackson.el заканчивается ..., а последняя строка показывает, что .emacs.tjackson.el load - ...done. Все эти другие файлы загружаются из моего .emacs.tjackson.el файла. Все остальные нагрузки атомные.

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

(setq message-log-max t)

Примечание: Если команда 'load подавит сообщения, если ее четвертый аргумент nomessage не равен нулю, поэтому удалите все такие вызовы (или посоветуйте * 1076). * и установить четвертый аргумент nil).

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

В дополнение к решению Адама Розенфилда , я рекомендую использовать Emacs в режиме сервера . Вы можете добавить (server-start) к вашим dotemacs и запускать emacsclient вместо emacs всякий раз, когда вы хотите открыть файл в Emacs. Таким образом, вы должны оплатить стоимость загрузки Emacs только один раз, после чего клиенты сразу же появятся.

Редактировать

Вы правы, v22 не создает новый фрейм. Создайте сценарий оболочки, который сделает свое дело:

#!/bin/bash
# Argument: filename to open in new Emacs frame
/usr/bin/emacsclient -e '(let ((default-directory "`pwd`/")) (select-frame (make-frame)) (find-file "'$1'"))'
28 голосов
/ 22 апреля 2009

Не закрывайте Emacs каждый раз, когда вы хотите использовать оболочку. Используйте Ctrl-Z, чтобы переместить Emacs на задний план, и команду fg в Bash, чтобы переместить его обратно на передний план.

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

Пара советов:

  1. Использовать автозагрузки

    Использование автозагрузки избавляет вас от загрузки библиотек до тех пор, пока вы их не используете. Например:

    (if (locate-library "ediff-trees")
        (autoload 'ediff-trees "ediff-trees" "Start an tree ediff" t))
    
  2. Скомпилируйте ваш .emacs

    Дает вам небольшое увеличение скорости, хотя есть ловушки, если вы работать с контролем версий, и ваш .emacs новее, чем .emacs.elc. Один из распространенных трюков:

    (defun autocompile nil
      "compile itself if ~/.emacs"
      (interactive)
      (require 'bytecomp)
      (let ((dotemacs (file-truename user-init-file)))
        (if (string= (buffer-file-name) (file-chase-links dotemacs))
          (byte-compile-file dotemacs))))
    
    (add-hook 'after-save-hook 'autocompile)
    
  3. Научитесь любить сервер Emacs.

    Запуск emacs в качестве сервера означает, что вам никогда не придется его закрывать. тем не мение Я заметил, что вы все еще используете emacs22. emacs23 поддерживает multi-tty, что делает гораздо проще запустить emacs за один сеанс экрана, а затем вызвать новые окна в другом терминале. Я использую Emacs для редактирования почты для моей почты client (mutt) и emacsclient отлично подходят для такого рода быстрых изменений.

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

Один из

M-x shell
M-x eshell
M-x term
M-x ansi-term

должно соответствовать вашим требованиям командной строки из Emacs.

Вы также можете использовать M-! (он же M-x shell-command), чтобы выполнить однострочник без опускания в оболочку.

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

Проверьте файл .emacs, чтобы увидеть, загружаете ли вы ненужные пакеты. Загрузка пакетов может занять значительное количество времени. Например, вы можете загрузить пакет php-mode, только если вы редактируете файл PHP. Вы можете сделать это, установив процедуру подключения, хотя я не уверен в деталях.

Также убедитесь, что все загружаемые вами пакеты скомпилированы (.elc файлы). Вы можете скомпилировать файл elisp, запустив

emacs -batch -f batch-byte-compile thefile.el

Скомпилированные пакеты загружаются намного быстрее, чем не скомпилированные.

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

"Я часто открываю и закрываю emacs, потому что мне удобнее использовать командную строку bash для работы с файлами / каталогами и компиляции."

Вы описываете, как используется редактор типа vim. Стреляй в и из. Emacs обычно остается открытым, и в основном все делается изнутри. Хиена уже ответила, что будет правильным подходом здесь.

11 голосов
/ 06 ноября 2011

Самый быстрый способ - профилировать ваш .emacs . Я сократил время загрузки с> 3 с до 1 с через 5 минут после того, как обнаружил, что 4 строки в моем .emacs занимают более 80% времени загрузки.

9 голосов
/ 28 апреля 2009

Одна вещь, которая помогла мне сократить время загрузки моего .emacs, в дополнение к autoload (как предлагали другие), это eval-after-load . В следующем примере задержка вызова на sql-set-product избавляет вас от необходимости загружать sql в .emacs, делая более эффективными автозагрузки sql.

(eval-after-load "sql"
  '(progn
     (sql-set-product 'mysql)
     (setq sql-mysql-options '("-C" "-t" "-f" "-n"))
     (setq sql-sqlite-program "sqlite3")
     ))

Конечно, для некоторых пакетов будет доступен хук , с помощью которого вы можете сделать то же самое, но иногда этого не происходит, или же этот способ просто проще думать.

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

Emacs предназначен для работы "все время" (или, по крайней мере, в течение длительных периодов времени), поэтому запускать и останавливать Emacs несколько раз в течение дня не рекомендуется.

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

После установки просто напишите "screen emacs" в вашем терминале. Emacs запустится как обычно, но нажатие «c-a c» (то есть нажатие ctrl-a, а затем c) откроет новый виртуальный терминал. Вы можете вернуться к emacs, нажав "c-a c-a" (это два раза ctrl-a).

Вы даже можете отсоединиться от сеанса рабочего экрана, последовательность клавиш - "c-a d".

Повторно присоединитесь к сеансу, введя «screen -R», и вы вернетесь туда, где оставили. Это позволяет вам запускать сеанс emacs на работе, отсоединяться, идти домой и повторно присоединяться из дома.

Я уже несколько месяцев подряд запускаю Emacs.

Вот официальный веб-сайт: http://www.gnu.org/software/screen/, но попробуйте поискать учебники по экрану и инструкции

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