Есть ли преимущества использования ~ / .emacs.d / init.el вместо ~ / .emacs?

108

Я обычно использовал ~/.emacsдля моего файла конфигурации, но я заметил, что другие используют ~/.emacs.d/init.el. Есть ли преимущества для init.elместоположения? Есть ли недостатки?

Ларри Коулман
источник
4
Emacs (или, по крайней мере, некоторые версии emacs) автоматически записывают данные в .emacs.
Виви
4
@Vivi Если вы не говорите об очень старых версиях, Emacs записывает вещи в user-init-file. Это будет, .emacsесли у вас уже есть .emacs, и init.elесли вы использовали это вместо.
Радон Росборо
Люди сосредоточились на преимуществах ~/.emacs.d/init.elпренебрежения недостатками. Я отвечу на это: у него нет недостатков!
Омар
Тангенциально, начиная с версии релиз 27.1 Emacs предпочтут конфигурационный путь XDG ~/.config/emacs/более ~/.emacs.d/. IIUC, если первый существует , последний не будет рассматриваться.
Филс

Ответы:

103

Да это так. Цитирование lunaryorn на Reddit :

  • Он сохраняет $HOMEкаталог в беспорядке, потому что все файлы Emacs аккуратно содержатся в одном каталоге. По той же причине все современные пакеты Emacs записывают свои кэши, истории и т ~/.emacs.d/. Д. В.

  • Это облегчает контроль версий, особенно если вы разделяете свой init.el на разные файлы в ~/.emacs.d. Вы можете просто зафиксировать, init.elкак любой другой файл, и git clone /my/emacs/config.git ~/.emacs.dв новой системе вы получите всю свою конфигурацию Emacs, без необходимости связывать файл с $HOME.

nicael
источник
3
Как это облегчает контроль версий? Вы можете разделить ваш файл инициализации без использования .emacs.d.
Жиль
3
Это не делает управление версиями проще, если у вас есть только файл .emacs, но если у вас есть другие файлы emacs в .emacs.d, это так. Например, customсохраняет файлы в .emacs.d, и если вы сохраняете init.el в них, все ваши файлы emacs, контролируемые версиями, находятся в одном каталоге.
Тед Роден
4
Полностью контролируя версию вашего каталога .emacs.d /, вы также можете контролировать версии пакетов, которые вы устанавливаете через packages.el (ELPA, MELPA…). Это облегчает разделение вашей конфигурации между несколькими компьютерами и позволяет определить, где в вашей конфигурации был введен регресс (вы отслеживаете свои зависимости). Плохая сторона в том, что он делает довольно тяжелое хранилище.
смокинг
11
Системы контроля версий не создают версии только одного файла - они хотят создать версию папки. Так что вы версия ~/, и добавьте только свою .emacs. Но теперь вам нужно убедиться, что вы не фиксируете никаких других файлов, так что вы .hgignore или .gitignore все остальные файлы в ~/. Но теперь вы не можете отслеживать другие файлы ~/, например, ~/.bashrcили ~/.bash_aliases.
zck
Связанный: github.com/RichiH/vcsh
wchargin
37

Еще одно преимущество: если все в порядке .emacs.d, вы можете сохранить свою конфигурацию Emacs в Dropbox (или в качестве альтернативы) и поставить символическую ссылку всей конфигурации в свой домашний каталог. Это делает синхронизацию между компьютерами тривиальной.

shosti
источник
25

Если все, что вам нужно для настройки Emacs так, как вам нравится, это файл инициализации, это не имеет значения, если это ~/.emacsили ~/.emacs.d/init.el. Но имеет смысл создать каталог, как только вы начнете разделять файл инициализации или добавляете конфиги, связанные с Emacs, например, файл Cask. Кроме того, это место, где вы сохраните файл с определениями сокращений, файл для пользовательских опций ( M-x customize) и т. Д.

Держите все аккуратно заправленным ~/.emacs.d.

Даниэль Шмулевич
источник
6

Emacs 27 будет ввести новый файл инициализации early-init-fileпод user-emacs-directory, а именно в ~/.emacs.d/early-init.el. Таким образом, дальнейшее преимущество использования ~/.emacs.d/init.elвместо ~/.emacsfor user-init-fileзаключается в том, что первый будет помещать оба файла инициализации под одной крышей для согласованности.

До выпуска Emacs 27 документацию по этой новой функции можно найти в следующих файлах исходного дерева Emacs:

Бэзил
источник
2

Не уверен, что это действительно имеет значение с точки зрения скорости, но вы можете легче скомпилировать ваши настройки, если ваша конфигурация находится в .emacs.d/init.el(то есть, создать .emacs.d/init.elc)

armando.sano
источник
1
Обратите внимание, что ~/.emacs.elэто также допустимое имя файла инициализации.
Филс
1

Вы используете ~/.emacs.d/init.elи просто символическую ссылку на этот файл ~/.emacs, на случай, если некоторые другие программы / плагины ожидают найти .emacs.

В системе MacOS или GNU / Linux команда будет выглядеть так:

ln -s ~/.emacs.d/init.el ~/.emacs

Таким образом, вы получите все преимущества VC вашей ~/emacs.dструктуры каталогов и сможете использовать более короткое имя, когда вам нужно будет отредактировать файл init.el ~/.emacsвместо того, чтобы вводить ~/emacs.d/init.el👍

cseder
источник
Что это за загадочные «другие программы / плагины», которые «ожидают найти .emacs»? Я не думаю, что это реальная проблема.
Филс
1
Одним из примеров может быть Quicklisp, если вы делаете (ql: add-to-init-file), по умолчанию это ~ / .emacs
cseder
Как любопытно. Я бы сказал, что любые такие случаи будут оправдывать сообщения об ошибках - Emacs в течение очень долгого времени поддерживает различные имена файлов инициализации, а последовательность приоритетов четко задокументирована, поэтому у других программ нет веских причин не понимать это правильно. , Я не ожидал фактического примера вообще :) Приветствия.
Филс