Có bất kỳ lợi thế nào khi sử dụng ~ / .emacs.d / init.el thay vì ~ / .emacs không?


108

Tôi thường sử dụng ~/.emacscho tập tin cấu hình của mình, nhưng tôi đã nhận thấy những người khác sử dụng ~/.emacs.d/init.el. Có lợi thế cho init.elvị trí? Có nhược điểm nào không?


4
Emacs (hoặc ít nhất là một số phiên bản của emacs) tự động viết nội dung trên .emacs.
Vivi

4
@Vivi Trừ khi bạn nói về các phiên bản rất cũ, Emacs viết mọi thứ vào user-init-file. Điều này sẽ là .emacsnếu bạn đã có một .emacs, và init.elnếu bạn sử dụng nó thay thế.
Radon Rosborough

Mọi người tập trung vào những lợi thế của việc ~/.emacs.d/init.elbỏ qua những nhược điểm. Tôi sẽ trả lời phần đó: nó không có nhược điểm nào cả!
Omar

Tiếp theo, bắt đầu từ phiên bản phát hành 27.1 Emacs sẽ thích đường dẫn cấu hình XDG ~/.config/emacs/hơn ~/.emacs.d/. IIUC, nếu cái trước tồn tại , cái sau sẽ không được xem xét.
phils

Câu trả lời:


103

Vâng, có. Trích dẫn lunaryorn trên Reddit :

  • Nó giữ cho $HOMEthư mục không bị lộn xộn, bởi vì tất cả các tệp của Emacs được chứa gọn gàng trong một thư mục. Vì lý do tương tự, tất cả các gói Emacs hiện đại đều ghi bộ nhớ cache, lịch sử, v.v. vào ~/.emacs.d/.

  • Nó giúp kiểm soát phiên bản dễ dàng hơn, đặc biệt nếu bạn chia init.el thành các tệp khác nhau ~/.emacs.d. Bạn chỉ có thể cam kết init.elnhư mọi tệp khác và git clone /my/emacs/config.git ~/.emacs.dtrên một hệ thống mới cung cấp cho bạn tất cả cấu hình Emacs của bạn mà không cần phải liên kết tệp vào $HOME.


3
Làm thế nào để nó kiểm soát phiên bản dễ dàng hơn? Bạn có thể tách tập tin init của bạn mà không cần sử dụng .emacs.d.
Gilles

3
Nó không làm cho việc kiểm soát phiên bản dễ dàng hơn nếu bạn chỉ có tệp .emacs, nhưng nếu bạn có các tệp emacs khác trong .emacs.d, thì không. Ví dụ: customlưu tệp vào .emacs.d và nếu bạn giữ init.el trong tất cả các tệp emacs được kiểm soát phiên bản của bạn nằm trong một thư mục.
Ted Roden

4
Bằng cách hoàn toàn phiên bản thư mục .emacs.d / của bạn, bạn cũng có thể kiểm soát phiên bản các gói bạn cài đặt qua gói.el (ELPA, MELPA Thẻ). Điều này giúp chia sẻ cấu hình của bạn giữa nhiều máy tính dễ dàng hơn và tìm nơi hồi quy được giới thiệu trong cấu hình của bạn (bạn theo dõi các phụ thuộc của mình). Mặt xấu là nó làm cho một kho lưu trữ khá nặng.
tuxella

11
Các hệ thống kiểm soát phiên bản không chỉ phiên bản một tệp - chúng muốn phiên bản một thư mục. Vì vậy, phiên bản của bạn ~/, và thêm chỉ của bạn .emacs. Nhưng bây giờ, bạn phải đảm bảo rằng bạn không cam kết bất kỳ tệp nào khác, vì vậy bạn .hgignore hoặc .gitignore mọi tệp khác trong ~/. Nhưng bây giờ bạn không thể theo dõi bất kỳ tập tin nào khác ~/, như ~/.bashrchoặc ~/.bash_aliases.
zck


37

Một lợi thế nữa: nếu mọi thứ đều ổn .emacs.d, bạn có thể giữ cấu hình Emacs của mình trên Dropbox (hoặc một giải pháp thay thế) và liên kết toàn bộ cấu hình với thư mục chính của bạn. Điều đó làm cho việc đồng bộ hóa trên các máy tính trở nên tầm thường.


25

Nếu tất cả những gì bạn cần để thiết lập Emacs theo cách bạn thích là một tệp init, nó sẽ không tạo ra sự khác biệt nếu nó ~/.emacshoặc ~/.emacs.d/init.el. Nhưng thật hợp lý khi tạo một thư mục ngay khi bạn bắt đầu chia tệp init hoặc thêm các cấu hình liên quan đến Emacs, một tệp Cask chẳng hạn. Ngoài ra, đó là nơi bạn sẽ lưu tệp với các định nghĩa viết tắt, tệp cho các tùy chọn tùy chỉnh ( M-x customize), v.v.

Giữ mọi thứ gọn gàng trong ~/.emacs.d.


6

Emacs 27 sẽ giới thiệu một tập tin khởi động mới early-init-filedưới user-emacs-directory, cụ thể là tại ~/.emacs.d/early-init.el. Vì vậy, một lợi ích nữa cho việc sử dụng ~/.emacs.d/init.elthay vì ~/.emacscho user-init-filelà trước đây sẽ đặt cả hai tệp khởi tạo dưới cùng một mái nhà, để thống nhất.

Cho đến khi Emacs 27 được phát hành, bạn có thể tìm thấy tài liệu cho tính năng mới này trong các tệp sau của cây nguồn Emacs:


2

Không chắc chắn nếu điều này thực sự tạo ra sự khác biệt về tốc độ, nhưng bạn có thể biên dịch byte thiết lập dễ dàng hơn nếu cấu hình của bạn nằm trong .emacs.d/init.el(tức là tạo .emacs.d/init.elc)


1
Lưu ý rằng đó ~/.emacs.elcũng là một tên tệp init hợp lệ.
phils

1

Bạn sử dụng ~/.emacs.d/init.elvà chỉ symlink tệp đó ~/.emacs, chỉ trong trường hợp một số chương trình / plugin khác mong muốn tìm thấy .emacs.

Trên hệ thống macOS hoặc GNU / Linux, lệnh sẽ là:

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

Bằng cách này, bạn có được tất cả các lợi ích của VC trong ~/emacs.dcấu trúc thư mục của mình và bạn sẽ có thể sử dụng tên ngắn hơn khi bạn cần chỉnh sửa tệp init.el ~/.emacsthay vì nhập~/emacs.d/init.el


Những "chương trình / plugin" bí ẩn nào mà "mong đợi tìm thấy .emacs" là gì? Tôi không nghĩ đó là một mối quan tâm thực sự.
phils

1
Một ví dụ có thể là Quicklisp, nếu bạn thực hiện (ql: add-to-init-file), nó mặc định là ~ / .emacs
cseder

Thật tò mò làm sao. Tôi sẽ nói rằng bất kỳ trường hợp nào như vậy sẽ đảm bảo báo cáo lỗi - Emacs đã hỗ trợ nhiều tên tệp init trong một thời gian rất dài và trình tự ưu tiên được ghi lại rõ ràng, vì vậy không có lý do chính đáng nào để các chương trình khác không hiểu đúng . Mặc dù vậy, tôi đã không dự đoán một ví dụ thực tế nào cả :) Chúc mừng.
phils
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.