Bagaimana saya bisa membuat Emacs memuat ulang semua definisi saya yang telah saya perbarui .emacs
tanpa memulai ulang Emacs?
Bagaimana saya bisa membuat Emacs memuat ulang semua definisi saya yang telah saya perbarui .emacs
tanpa memulai ulang Emacs?
Jawaban:
Anda dapat menggunakan perintah memuat file ( M-x load-file
, lalu tekan kembali dua kali untuk menerima nama file default, yang merupakan file saat ini sedang diedit).
Anda juga bisa memindahkan titik ke akhir dari setiap sexp dan tekan C-xC-euntuk mengeksekusi hanya sexp itu. Biasanya tidak perlu memuat ulang seluruh file jika Anda hanya mengubah satu atau dua baris.
defun
atau defvar
, Anda juga dapat meninggalkannya di dalam badan dan tipe deklarasi C-M-x
. Sangat berguna.
Sangat aneh bahwa sangat nyaman
M-x eval-buffer
tidak disebutkan di sini.
Segera mengevaluasi semua kode dalam buffer, ini metode tercepat, jika .emacs
idempotent Anda.
.emacs
(atau harus) idempoten?
.emacs
tidak menjadi idempoten?
Anda biasanya hanya dapat mengevaluasi kembali wilayah yang diubah. Tandai wilayah ~ / .emacs yang telah Anda ubah, lalu gunakan M-x eval-region RET
. Ini sering lebih aman daripada mengevaluasi ulang seluruh file karena mudah untuk menulis file .emacs yang tidak berfungsi dengan benar setelah dimuat dua kali.
Jika file .emacs Anda terbuka di buffer yang sedang aktif:
Mx eval-buffer
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
prompt (termasuk tanda kurung)user-init-file
adalah variabel yang menyimpan ~/.emacs
nilai (menunjuk ke jalur file konfigurasi) secara default(load)
lebih pendek, lebih tua, dan versi non-interaktif (load-file)
; ini bukan perintah emacs (untuk diketik M-x) tetapi fungsi elisp belakaM-:
> M-x
Orang lain sudah menjawab pertanyaan Anda sebagaimana dinyatakan, tetapi saya menemukan bahwa saya biasanya ingin mengeksekusi baris yang baru saja saya tulis. untuk itu, CtrlAltxdi lisp berfungsi dengan baik.
eval-lastsexp
, diC-x C-e
C-M-x
, Anda tidak harus "di ujung pantat" - apakah Anda berpikir C-x C-e
mungkin? Yang menyenangkan C-M-x
adalah bahwa Anda dapat menjalankannya bahkan ketika titik di tengah deklarasi fungsi / variabel.
Saya sarankan Anda tidak melakukan ini, pada awalnya. Sebagai gantinya, mulailah sesi emacs baru dan uji perubahan apa pun yang Anda buat untuk melihat apakah mereka berfungsi dengan benar. Alasan untuk melakukannya dengan cara ini adalah untuk menghindari meninggalkan Anda dalam keadaan di mana Anda memiliki file .emacs yang tidak dapat dioperasikan, yang gagal memuat atau gagal memuat dengan bersih. Jika Anda melakukan semua pengeditan dalam sesi asli, dan semua pengujian dalam sesi baru, Anda akan selalu memiliki sesuatu yang dapat diandalkan untuk mengomentari kode yang menyinggung.
Ketika Anda akhirnya puas dengan perubahan Anda, maka silakan dan gunakan salah satu jawaban lain untuk memuat ulang. Preferensi pribadi saya adalah eval
hanya bagian yang Anda tambahkan / ubah, dan untuk itu cukup sorot wilayah kode / panggilan yang ditambahkan / diubah M-x eval-region
. Melakukan hal itu meminimalkan kode yang dievaluasi, meminimalkan efek samping yang tidak disengaja, seperti yang ditunjukkan luapyad.
Pintasan keyboard:
(defun reload-init-file ()
(interactive)
(load-file user-init-file))
(global-set-key (kbd "C-c C-l") 'reload-init-file) ; Reload .emacs file
C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el
Saya saat ini di Ubuntu 15,04; Saya suka mendefinisikan kunci untuk ini.
[M-insert] diterjemahkan menjadi alt-insert pada keyboard saya.
Masukkan ini ke dalam file .emacs Anda:
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
Tentukan dalam file init Anda dan panggil dengan Mx reload-user-init-file
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
Meskipun M-x eval-buffer
akan berhasil, Anda mungkin akan mengalami masalah dengan matikan dan hal serupa lainnya. Pendekatan yang lebih baik mungkin untuk "menandai" atau menyorot apa yang baru di .emacs Anda (atau bahkan buffer awal jika Anda hanya bermain-main) dan kemudian M-x eval-region
. Semoga ini membantu.
Berikut adalah cara cepat dan mudah untuk menguji konfigurasi Anda dengan cepat. Anda juga dapat menggunakan C-x C-e
di akhir lisp tertentu untuk menjalankan fungsi tertentu secara individual.
Cx Ce menjalankan perintah eval-last-sexp (ditemukan di global-map), yang merupakan fungsi Lisp interaktif yang dikompilasi.
Itu terikat ke Cx Ce.
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)
Mengevaluasi sexp sebelum poin; nilai cetak di area gema. Secara interaktif, dengan argumen awalan, cetak output ke buffer saat ini.
Biasanya, fungsi ini memotong output panjang sesuai dengan nilai variabel 'eval-expression-print-length' dan 'eval-expression-print-level'. Namun, dengan argumen awalan nol, tidak ada pemotongan seperti itu. Argumen awalan seperti itu juga menyebabkan bilangan bulat dicetak dalam beberapa format tambahan (oktal, heksadesimal, dan karakter).
Jika 'eval-expression-debug-on-error' adalah non-nil, yang merupakan default, perintah ini mengatur semua kesalahan untuk masuk ke debugger.
Di samping perintah seperti Mx eval-buffer atau Mx load-file, Anda dapat memulai kembali emacs baru dari baris perintah:
emacs -q --load "init.el"
Contoh penggunaan stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
Anda dapat mengatur pengikatan kunci untuk emacs seperti ini
;; reload emacs configuration
(defun reload-init-file ()
(interactive)
(load-file "~/.emacs"))
(global-set-key (kbd "C-c r") 'reload-init-file)
Semoga ini bisa membantu!