2009-08-01 27 views
116

Tôi đã quyết định xem Emacs và tôi rất thích nó. Bây giờ, tôi đang sử dụng các Emacs Starter Kit, mà loại cung cấp mặc định tốt hơn và một số tùy chỉnh đẹp để cài đặt mặc định của Emacs.Làm cách nào để biên dịch byte mọi thứ trong thư mục .emacs.d của tôi?

Tôi đã tùy chỉnh nó một chút, thêm một số nội dung như yasnippet, color-themes, unbound và các nội dung khác. Tôi đã thiết lập một github repository nơi tôi giữ tất cả các tùy chỉnh để tôi có thể truy cập chúng từ nhiều nơi hoặc trong trường hợp có điều gì đó xấu và tôi mất thư mục .emacs.d của tôi.

Tất cả điều này là rất tốt đẹp, nhưng có một vấn đề: Emacs mất khoảng 1-2 giây để tải. AFAIK Tôi có thể biên dịch các tệp .el riêng lẻ với M-x byte-biên dịch-tệp thành .elc và nó hoạt động. Nhưng có rất nhiều tệp .el và tôi tự hỏi liệu có cách nào để biên dịch tất cả chúng bằng một lệnh đơn giản hay không, để tăng tốc độ tải các Emac. Emacs của tôi không phải lúc nào cũng mở, và tôi mở và đóng nó khá thường xuyên, đặc biệt sau khi tôi đã thiết lập nó như một trình soạn thảo mặc định cho lệnh chỉnh sửa trong Total Commander để làm quen với nó nhanh hơn (yeah, windows xp here).

Phiên bản Emacs của tôi là 22.3. Và có, cài đặt Emacs mặc định mà không có bất kỳ tùy chỉnh nào kích hoạt ngay lập tức.

Tôi không chắc chắn phiên bản nào được ưa chuộng khi tải, các .el hoặc biên soạn .elc một bằng cách này Oo

Vì vậy, là có một lệnh elisp hoặc Emacs chuyển đổi dòng lệnh để làm cho Emacs byte-biên dịch tất cả mọi thứ trong thư mục .emacs.d?

Trả lời

182

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

sẽ biên dịch tất cả các file .el trong thư mục và thư mục con trong tất cả các bên dưới.

Phần C-u 0 là làm cho nó không hỏi về mọi tệp .el không có đối tác .elc.

+8

Và sau đó (một lần mỗi đã được biên soạn một lần), chỉ cần sử dụng các lệnh tương tự mà không 'Cu 0' (còn gọi là' C-0', BTW). Điều đó sẽ chỉ biên dịch byte các tệp nguồn gần đây hơn các phiên bản được biên dịch byte của chúng. – Drew

+1

Một lưu ý nho nhỏ: đối với tôi không hiệu quả cho đến khi tôi xóa tất cả các tệp «.elc». Nó chỉ nói với một cái gì đó như «Xong, 0 tập tin được quay, α tập tin bị bỏ qua». –

+1

@ Hi-Angel Tôi có cùng một vấn đề. Bạn đã tìm thấy giải pháp nào chưa? – zhanxw

15

này được lắc lư một chút từ câu hỏi, nhưng để giải quyết vấn đề tải chậm bạn có thể sử dụng tính năng daemon mới trong Emacs 23.

"Nếu bạn có rất nhiều các gói hỗ trợ, emacs Tuy nhiên, emacs 23 mang emacs --daemon, cho phép bạn bắt đầu các emacs trong nền (ví dụ: khi bạn đăng nhập) .Bạn có thể ngay lập tức bật lên các cửa sổ emacs mới (khung) với emacsclient.Tất nhiên, bạn có thể đã có một 'máy chủ' emacs trong phiên bản cũ, nhưng có khả năng bắt đầu nó ở chế độ nền làm này là một giải pháp tốt hơn nhiều"

Từ http://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html

+0

Tôi chắc chắn sẽ kiểm tra này một trong ra ngoài. Cảm ơn bạn! – Mikka

+2

Nếu bạn thêm bí danh emacs = 'emacsclient -nw -a "" -c' vào .bashrc (hoặc phiên bản shell của bạn) trước tiên nó sẽ cố gắng kết nối với một daemon đang chạy nếu có, nếu không nó sẽ bắt đầu một và kết nối bạn. – Frederick

41

Để tự động byte biên dịch tất cả những gì cần byte biên soạn mỗi khi tôi bắt đầu emacs, tôi đặt sau đây sau khi thay đổi của tôi để load-path ở đầu .emacs tập tin của tôi:

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

Đáng ngạc nhiên, nó không thêm nhiều thời gian khởi động của tôi (trừ khi somethi ng cần được biên dịch).

Để tăng tốc độ các emac, lần đầu tiên tôi xác định các bộ phận chậm bằng cách sử dụng profile-dotemacs.el và sau đó thay thế chúng bằng autoloads.

20

Bạn có thể sử dụng cờ --batch để biên dịch lại từ dòng lệnh.

Để biên dịch lại tất cả, làm

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

hoặc biên dịch lại một tập tin duy nhất, kể từ một Makefile,

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

sử dụng [batch-byte-compile] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Compilation-Functions.html#index-batch_002dbyte_002dcompile-909) để thay thế. – npostavs

+0

Bạn có thể sử dụng nó không? – nacho4d

+4

@ nacho4d 'emacs -Q --batch -f batch-byte-compile * .el foo/*. El' - nó không recurse như ** byte-biên dịch-directory ** mặc dù. –

Các vấn đề liên quan