Ganti memerlukan pernyataan dengan memuat otomatis dalam file .emacs untuk meningkatkan kinerja

8

Menurut posting ini:

seseorang bisa mengganti requiredan loadpernyataan dalam .emacsfile untuk mempercepat emacs dimulai. Namun saya tidak tahu bagaimana melakukan ini secara detail.

Sebagai contoh saya memiliki (antara lain) di file emacs saya berikut ini requiredan loadpernyataan:

(load "auctex.el" nil t t)
(require 'alarm)
(require 'linked)
(load "nxhtml/autostart.el")
(require 'autoinsert)
(require 'recentf)
(require 'color-theme)
(load "~/.emacsaddons/emacs-color-theme-solarized/color-theme-solarized")
...

Untuk alarmdan linkedada file yang sesuai di direktori yang disebut .emacsaddons, karena nxhtmlada direktori, untuk yang lain tidak ada file yang sesuai di .emacsaddons. Saya tidak mencakup semua requireatau loadpernyataan dari saya .emacsfile dalam contoh di atas, hanya beberapa di mana saya merasa bahwa langkah-langkah untuk menggantinya dengan autoloadakan berbeda antara mereka (misalnya karena beberapa memiliki elfile unter .emacsaddonsdan beberapa tidak, atau karena nxhtmlyaitu subdir dari .emacsaddons...).

Bagaimana langkah-langkah terperinci untuk mengganti semuanya dengan autoloadfungsi untuk meningkatkan kinerja?

siswa
sumber

Jawaban:

4

Sebagai langkah pertama menuju autoloading, saya menyarankan Anda mengonversi loadperintah eksplisit Anda dengan path yang ditambahkan ke daftar hal-hal yang harus dimuat oleh emacs, seperti pada:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/"))

Dengan itu di bagian atas Anda .emacs, Anda dapat memanggil hal-hal lain yang bergantung pada memuat file lain sehingga mereka akan ditemukan.

Khusus untuk menunda memuat file, untuk setiap (require 'foo)yang Anda miliki di .emacs, Anda harus menggantinya dengan sesuatu yang mirip dengan:

(autoload 'name-of-foo-mode "code-for-foo.el" "Minor/Major mode for foo" t)

Anda mungkin harus bereksperimen (mungkin membaca) kode untuk .el file masing-masing untuk melihat apa nama yang harus Anda tempatkan 'name-of-foo-mode. Yang paling umum adalah 'fooatau 'foo-mode, tetapi ada ketidakkonsistenan.

Dalam kasus saya, saya memiliki deklarasi ini dekat dengan bagian bawah saya .emacs:

(autoload 'textmate-mode "textmate" "Minor mode for automatic bracket pairs" t)
(autoload 'post-mode "post" "Mode for editing e-mails" t)
(autoload 'turn-on-reftex "reftex" "Minor mode for references in TeX files" t)
(autoload 'mode-compile "mode-compile" "Compile current buffer" t)
(autoload 'markdown-mode "markdown-mode" "Major mode for Markdown files" t)

tetapi beberapa deklarasi yang harus saya lakukan requiresebelum saya pindah ke autoloading adalah:

(require 'reftex)
(require 'post)
(require 'compile)
(require 'textmate)

Jadi, seperti yang saya katakan, Anda mungkin harus melakukan beberapa eksperimen atau membaca kode, tetapi, pada akhirnya, itu sepadan, karena akan menghemat waktu jika Anda sering menggunakan emacs.

rbrito
sumber
1

Cara terbaik yang saya temukan untuk memulai emacs dengan cepat adalah dengan proses dasmon. Instruksi-instruksi ini berkaitan dengan emacs23. Versi sebelumnya memiliki kemampuan server / klien, tetapi bisa lebih sulit untuk dikonfigurasi. Ketika saya pertama kali login ke desktop saya, saya mengeksekusi emacs --daemon. Setelah ini, setiap kali saya perlu emacs saya jalankan emacsclient -c filenamedan muncul secara instan. Saat menggunakan emacs dalam mode server / klien, Anda harus menghentikan kebiasaan menggunakan C-x C-cuntuk keluar, alih-alih mengetik C-x #. FWIW, ini adalah sesuatu yang tampaknya diperbaiki oleh emacs23, karena saya kadang-kadang menemukan diri saya mengetik C-x C-ctanpa mematikan proses server, tetapi saya masih mempertahankan kebiasaan lama saya.

Tergantung pada kebutuhan Anda, ini mungkin berhasil lebih baik daripada memanipulasi konfigurasi Anda untuk mendapatkan sedikit keuntungan.

umeboshi
sumber