Як я байтую-збираю все у своєму каталозі .emacs.d?


138

Я вирішив перевірити Emacs, і мені це дуже сподобалось. Тепер я використовую Emacs Starter Kit , який забезпечує кращі настройки за замовчуванням та деякі приємні налаштування для встановлення Emacs за замовчуванням.

Я трохи його налаштував, додав деякі речі, такі як ясніппет , кольорові теми , незв’язані та інші. Я створив сховище github, де я зберігаю всі налаштування, щоб я міг отримати доступ до них з декількох місць або на випадок, якщо щось піде погано, і я втрачу каталог .emacs.d.

Все це дуже приємно, але є проблема: Emacs займає близько 1-2 секунд для завантаження. AFAIK Я можу компілювати окремі .el файли за допомогою Mx byte-compile-file до .elc, і він працює. Але є багато файлів .el, і мені цікаво, чи є спосіб зібрати їх усі за допомогою простої команди чи чогось, щоб прискорити завантаження Emacs. Мій Emacs не завжди відкритий, і я відкриваю і закриваю його досить часто, особливо після того, як я встановив його як редактор за замовчуванням для редагування команди в Total Commander, щоб швидше звикнути до нього (так, тут windows xp).

Моя версія Emacs - 22.3. І так, установка Emacs за замовчуванням без будь-яких налаштувань запускається миттєво.

Я не впевнений, яка версія є кращою при завантаженні, .el або компільована .elc одна до речі Oo

Отже, чи є команда elisp або перемикач командного рядка Emacs, щоб змусити Emacs байт-компілювати все в каталозі .emacs.d?

Відповіді:


208

C-u 0 M-x byte-recompile-directory

складе всі файли .el в каталозі та у всіх підкаталогах нижче.

C-u 0Частина , щоб зробити його не питати про кожного .el файл , який не має аналогів .elc.


9
А після цього (коли кожен буде складений один раз), просто використовуйте ту саму команду без C-u 0(aka C-0, BTW). Це буде байт-компіляція лише тих вихідних файлів, які є більш новими, ніж їх версії, складені в байті.
Дрю

1
Невелика примітка: для мене це не працювало, поки я не видалив усі файли «.elc». Він просто розповів щось на кшталт «Готово, 0 файлів зібрано, α файлів пропущено».
Привіт-Ангел

1
@ Привіт-Ангел У мене така ж проблема. Ви знайшли якесь рішення?
zhanxw

@zhanxw так. На жаль, команда компілює лише файли, які або змінилися, або не мають аналога «.elc». Отже, щоб перекомпілювати все в каталозі, потрібно спочатку видалити всі «.elc» файли.
Привіт-Ангел

2
На жаль, інтерактивна команда не відкриває її, але якщо ви зателефонуєте до функції безпосередньо, ви можете використовувати необов'язковий аргумент FORCEдля перекомпіляції файлів, які вже мають асоційований ".elc", навіть якщо вони не старші вихідного файлу:M-: (byte-recompile-directory "/the/directory/" 0 t)
jbm

44

Щоб автоматично байт збирати все, що потребує байтового компіляції щоразу, коли я запускаю emacs, після моїх змін load-pathу верхній частині мого .emacsфайлу я поміщаю наступне :

(byte-recompile-directory (expand-file-name "~/.emacs.d") 0)

Дивно, але це не додає моєму часу запуску (якщо щось не потрібно складати).

Щоб пришвидшити свій emacs, я спершу визначив повільні частини за допомогою профілю-dotemacs.el, а потім замінив їх автозавантаженнями .


документація автозавантажень переміщена. Це та посилання profile-dotemacs.el - саме те, що мені було потрібно, коли я натрапив на цю сторінку.
Digicrat

24

Ви можете використовувати --batchпрапор для перекомпіляції з командного рядка.

Щоб перекомпілювати все, зробіть

emacs --batch --eval '(byte-recompile-directory "~/.emacs.d")'

або перекомпілювати один файл із Makefile,

emacs --batch --eval '(byte-compile-file "your-elisp-file.el")'

5
використовувати замість batch-byte-compile .
npostavs

1
Не могли б ви цим користуватися?
nacho4d

8
@ nacho4d emacs -Q --batch -f batch-byte-compile *.el foo/*.el- він не повторюється, як і байт-рекомпіляція-каталог .
Брайан Бернс

3
Ймовірно, ви хочете додати аргумент для примусової рекомпіляції, наприклад. emacs --batch --eval '(байт-рекомпіляція-каталог "~ / .emacs.d" 0) "
Ібрагім

17

Це трохи хитається від питання, але щоб вирішити проблему завантаження повільно, ви можете використовувати нову функцію демона в Emacs 23.

"Якщо у вас багато пакетів підтримки, запуск emacs може бути трохи повільним. Однак, emacs 23 приносить emacs --daemon, який дозволяє запускати emacs у фоновому режимі (наприклад, під час входу в систему). створити нові вікна (кадри) emacs з emacsclient. Звичайно, ви вже можете мати сервер emacs у старих версіях, але можливість його запустити у фоновому режимі робить це набагато приємніше рішення "

Від http://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html


Я обов'язково перевірю це. Дякую!
Mikka

2
Якщо ви додасте псевдонім emacs = 'emacsclient -nw -a "" -c "у свій .bashrc (або версію вашої оболонки), він спершу спробує підключитися до запущеного демона, якщо він є, якщо ні, то він запустить його та підключиться ти.
Фредерік

2

Для мого використання spacemacs команда така spacemacs/recompile-elpa. Команда byte-recompile-directoryне збирає жодного файлу.


2
Різні речі. Елементи ELPA / MELPA визначили методи збирання у власній архіві ієрархії. байт-рекомпіляція-каталог намагається зібрати всі файли .el у визначеній користувачем каталозі.
RichieHH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.