Saya tahu emacs sering dianggap sebagai OS, tapi ... s / reboot / restart /?
William Pursell
6
Saya bukan pengembang, jadi banyak jawaban yang masuk akal bagi pengembang tidak terlalu berarti bagi saya
Yazz.com
4
@MJB tujuan dari Stack Overflow adalah untuk menjadi tempat penyimpanan pengetahuan bahkan untuk pertanyaan paling mendasar sekalipun. Pertanyaan ini sangat cocok dengan tujuan Stack Overflow. Silakan lihat stackoverflow.com/faq
haha sekarang lima tahun kemudian "pencarian Google pertama yang disarankan" mengarah di sini! bagus
JimLohse
Jawaban:
350
Anda dapat menggunakan perintah memuat file ( M-xload-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.
Perlu diingat bahwa ini mungkin tidak selalu melakukan apa yang Anda pikirkan. Jika Anda memiliki variabel yang isinya ditolak (yaitu mengatur boolean untuk itu berlawanan) maka perilaku tidak akan sama dengan memuat file.
chollida
4
Setiap efek samping secara umum cenderung merusak perilaku yang diinginkan: memuat file, dll.
vemv
Ketika saya melakukan ini, saya mendapatkan pesan: load-with-code-conversion: Nilai simbol sebagai variabel tidak valid: n
Chris Marie
2
Alih-alih memindahkan titik di belakang defunatau defvar, Anda juga dapat meninggalkannya di dalam badan dan tipe deklarasi C-M-x. Sangat berguna.
Thomas
151
Sangat aneh bahwa sangat nyaman
M-xeval-buffer
tidak disebutkan di sini.
Segera mengevaluasi semua kode dalam buffer, ini metode tercepat, jika .emacsidempotent Anda.
@ Mike: bukan aku. "Diberikan, b benar" dimaksudkan untukku, "jika a, b benar", tapi aku bisa mengerti maksudmu. Saya mengubah diberikan jika untuk lebih jelas.
Peter
7
@ Mike: Kapan masuk akal untuk .emacstidak menjadi idempoten?
Zaz
Saya akan berpikir ini menjadi saran pertama.
Stryker
1
Saya tidak akan mengatakan itu gaya yang baik tetapi itu mungkin terjadi. Misalnya Anda dapat memilih untuk tidak mendefinisikan kembali suatu fungsi jika sudah ditentukan (dari startup pertama). Anda mungkin tidak melihat perubahan dalam definisi ketika mengevaluasi file init Anda.
Kaligule
43
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.
Menarik. Saya belum mempertimbangkan ide file .emacs yang tidak idempoten. Sesuatu yang harus diperhatikan ketika saya mulai dengan ELisp
Erik
2
Saya kira itu jarang untuk menemukan file Emacs yang adalah idempoten, setidaknya dalam arti yang kuat dari dua eksekusi menghasilkan persis keadaan yang sama sebagai salah satu eksekusi. Paling tidak, sangat umum untuk menambahkan ke berbagai daftar, seringkali dengan cara yang tidak akan menekan entri duplikat ketika dieksekusi untuk kedua kalinya.
Dale Hagglund
1
Satu pemikiran lain: menggunakan pendekatan yang saya sarankan di atas, mungkin emacs state yang Anda miliki bukanlah apa yang sebenarnya dilakukan oleh .emacs Anda. Yaitu, karena Anda belum menjalankan seluruh file .emacs dari yang bersih, Anda tidak benar - benar tahu itu melakukan apa yang Anda inginkan.
Dale Hagglund
1
Yang sedang berkata, bukankah mungkin untuk menulis .emac dengan cara idempoten? Negara global itu menjijikkan.
Ehtesh Choudhury
39
Jika file .emacs Anda terbuka di buffer yang sedang aktif:
Satu hal yang perlu diperhatikan di sini adalah melakukan hal ini mungkin tidak membuat Anda dalam keadaan yang identik dengan pendekatan restart. (Contoh buatan: jika Anda memiliki pengaruh "toggle" di .emacs Anda).
itu M-:> Ctrl Alt x? berdasarkan logika Anda, saya membayangkan M-: <CMx ketika hanya satu baris dalam file init yang diubah? Mungkin itu hanya ==
Robert Houghton
12
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.
Dengan C-M-x, Anda tidak harus "di ujung pantat" - apakah Anda berpikir C-x C-emungkin? Yang menyenangkan C-M-xadalah bahwa Anda dapat menjalankannya bahkan ketika titik di tengah deklarasi fungsi / variabel.
Thomas
Saya mungkin punya kebiasaan pergi ke ujung lumpuh pada saat saya hanya menggunakan Cx Ce. Terima kasih atas tangkapannya!
Bahbar
9
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 evalhanya 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.
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:
Meskipun M-x eval-bufferakan 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-edi 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.
Pertanyaannya bertanya bagaimana melakukan ini tanpa me-restart Emacs. Meluncurkan salinan baru, sambil secara teknis menjawab pertanyaan, tampaknya tidak sesuai dengan semangat pertanyaan. 😄
chwarr
0
Anda dapat mengatur pengikatan kunci untuk emacs seperti ini
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.
sumber
defun
ataudefvar
, Anda juga dapat meninggalkannya di dalam badan dan tipe deklarasiC-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.sumber
.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.sumber
Jika file .emacs Anda terbuka di buffer yang sedang aktif:
sumber
sumber
Yang berikut harus melakukannya ...
sumber
larutan
M-:
(load user-init-file)
catatan
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 belakakesimpulan
M-:
>M-x
sumber
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.
sumber
eval-lastsexp
, diC-x C-e
C-M-x
, Anda tidak harus "di ujung pantat" - apakah Anda berpikirC-x C-e
mungkin? Yang menyenangkanC-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 / diubahM-x eval-region
. Melakukan hal itu meminimalkan kode yang dievaluasi, meminimalkan efek samping yang tidak disengaja, seperti yang ditunjukkan luapyad.sumber
Pintasan keyboard:
sumber
sumber
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:
sumber
Tentukan dalam file init Anda dan panggil dengan Mx reload-user-init-file
sumber
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 kemudianM-x eval-region
. Semoga ini membantu.sumber
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.sumber
Di samping perintah seperti Mx eval-buffer atau Mx load-file, Anda dapat memulai kembali emacs baru dari baris perintah:
Contoh penggunaan stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
sumber
Anda dapat mengatur pengikatan kunci untuk emacs seperti ini
Semoga ini bisa membantu!
sumber
Jika shell Anda dibuka di dalam Emacs, Anda juga dapat melakukan:
Dapat menyimpan beberapa goresan kunci.
sumber