Saya memiliki ini secara default di auto-mode-alist
:
("\\.js\\'" . javascript-mode)
(bahkan dengan emacs -Q
). Saya ingin mengganti js2-mode
untuk javascript-mode
. Tentu saja, saya bisa menggunakan assq-delete-all
dan sekali add-to-list
lagi, tetapi saya bertanya-tanya apakah tidak ada cara yang lebih baik.
Sunting: Saya secara eksplisit tidak ingin menggunakan Sesuaikan, saya lebih suka membuat init.el
sendiri.
elisp
association-lists
mbork
sumber
sumber
Gunakan
setf
untuk mengubah nilai di tempat:Jika Anda ingin mengganti nilai dalam daftar, maka
setf
adalah mesin umum yang perlu Anda lakukan. Untuk cara yang lebih idiomatis untuk menghadapinyaauto-mode-alist
, lihat jawaban @ Drew (dan penjelasannya tentang membayangi).sumber
setf
dapat benar-benar ditunjukkan kepada orang-orang Jawa.)setf
digunakan sepanjang waktu di Common Lisp, tetapi Anda sering berlari melewatinya di elisp.setf
jarang menggunakan , dibandingkan dengan CL ...Cara tercepat untuk benar-benar mengubah sel kontra mungkin
setcdr
Perlu dicatat bahwa
setf
tidak tersedia di Emacsen yang lebih tua, tetapisetcdr
memang demikian.sumber
setf
?OP meminta solusi yang menangani alists yang memiliki kunci string. Untuk mengatasinya, lihat pertanyaan ini . Jika kebetulan Anda hanya perlu menangani alists dengan tombol simbol, maka pada Emacs 25 Anda dapat menggunakan:
untuk mengganti cdr. Jika Anda memiliki akses ke Emacs 26, teknik ini berfungsi dengan kunci string, sebagai berikut:
Perhatikan bahwa ada juga cara lain dalam Emacs 26 untuk menangani kunci string; lihat pertanyaan ini sebagaimana disebutkan di atas.
sumber
(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)
harus bekerja (membutuhkan Emacs 26 sekalipun).alist-get
dengan string"\\.js\\'"
, tetapialist-get
didasarkan padaassq
, sehingga tidak akan bekerja dengan string seperti yang Anda klaim dalam jawaban Anda.Jika Anda tahu Anda tidak akan menggunakan mode javascript lagi, biarkan auto-mode-alist tidak tersentuh dan tambahkan ke init.el Anda
sumber
javascript-mode
, sungguh:javascript-mode
hanya alias untukjs-mode
(secara default) dan dilakukan dengan cara ini secara khusus sehingga pengguna dapat melakukan seperti yang Anda sarankan jika mereka lebih sukajs2-mode
(tanpa kehilangan kemampuan untuk digunakanjs-mode
jika mereka mau).js-mode
(bertentangan dengan apa yang terjadiperl-mode
, misalnya).