Apa cara tercepat untuk memuat ulang file .emacs saya ketika saya melakukan perubahan sehingga semua buffer saya yang terkena dampak akan mengambil perubahan itu?

27

Saya menyadari C-x C-eyang mana eval-last-sexpdan M-x eval-buffer, tetapi ini tidak selalu cukup untuk mengambil semua perubahan. Kadang-kadang Anda harus benar-benar menutup buffer yang ada dalam mode yang konfigurasi mereka berubah, dan di lain waktu Anda harus memulai ulang emacs sepenuhnya. Apakah ada cara yang lebih umum untuk menangani masalah ini? Atau, apakah ada cara untuk memulai kembali emacs tanpa kehilangan buffer terbuka yang ada dan sejarah interaktif?

B4 tangan
sumber
Seperti @ b4hand yang awalnya dinyatakan, ini pada dasarnya adalah pertanyaan berdasarkan salah satu pertanyaan proposal: area51.stackexchange.com/proposals/76571/emacs/76588#76588
tarsius

Jawaban:

16

Tidak, itu tidak mungkin untuk memuat ulang konfigurasi yang dimodifikasi dan memiliki Emacs berperilaku seolah-olah modifikasi itu sudah ada ketika Emacs dimuat. Singkatnya, paket-paket Emacs memiliki kebebasan terlalu banyak untuk dapat diimplementasikan.

Anda menyebutkan bahwa beberapa mode utama tidak menerima perubahan konfigurasi. Alasan yang mungkin untuk ini adalah karena mengaktifkan mode menetapkan beberapa variabel buffer-lokal berdasarkan nilai saat ini dari opsi tertentu. Tanpa mengaktifkan kembali mode seperti itu di setiap buffer yang menggunakannya, tidak semua perubahan akan diambil. Dan bahkan pada saat itu sangat mungkin bahwa beberapa hal tetap tidak berubah. Peluang kerja ini lebih tinggi ketika opsi dikustomisasi menggunakan custom-set-variablesformulir, tetapi ini harus diterapkan secara eksplisit untuk setiap opsi. Dan sejauh ini kami hanya berbicara tentang mode utama dan opsi mereka ...

Anda dapat mencoba menerapkan perintah untuk mengaktifkan kembali mode utama setiap buffer. Tetapi tidak mungkin itu akan sepenuhnya mengaktifkan semua perubahan, dan lebih buruk itu akan menonaktifkan semua mode minor yang telah Anda aktifkan secara manual, dan kehilangan semua jenis negara lainnya.

Untuk alasan itu saya bahkan akan merekomendasikan untuk eval-buffertidak memasukkan file init Anda sama sekali untuk mengambil sebanyak mungkin perubahan. Mengevaluasi pengaturan yang diubah menggunakan masing-masing eval-last-sexpdan jika itu tidak berhasil, maka Anda harus me-restart Emacs.

Bagaimana keadaan dapat dipertahankan ketika Emacs ditutup adalah pertanyaan berbeda yang harus ditanyakan secara terpisah.

tarsius
sumber
Saya telah mengajukan pertanyaan mulai ulang di sini: emacs.stackexchange.com/questions/639/…
b4hand
3

Kadang-kadang Anda harus benar-benar menutup buffer yang ada dalam mode yang telah diubah konfigurasinya

Memanggil normal-modeadalah cara yang berguna untuk memicu kembali semua mode untuk buffer yang diberikan, jika Anda telah membuat perubahan pada mereka atau kaitannya yang terkait.

Anda juga dapat menggunakan revert-buffer(yang memanggil normal-mode), yang seperti memuat ulang file tanpa membuang riwayat undo.

(Anda juga dapat memuat ulang file dengan C-xC-v, tetapi itu akan membuang riwayat undo Anda.)

Dalam M-x ibuffermengetikkan huruf besar Vmengembalikan semua buffer yang ditandai, sementara huruf besar Edan Wmemungkinkan Anda untuk mengevaluasi elisp acak untuk semua buffer yang ditandai.

phils
sumber