Katakanlah saya punya kode elisp seperti:
(+ 2 3▮(+ 3
4))
Apakah ada cara untuk secara otomatis indentasi ulang sexp setelah kursor, ketika saya menambah atau menghapus simbol?
Jadi setelah menekan SPC 4 SPC
, saya akan secara otomatis mendapatkan:
(+ 2 3 4 ▮(+ 3
4))
Saya dapat melakukan manual ini dengan menelepon mark-sexp
diikuti oleh indent-region
. Apakah ada cara yang lebih baik untuk melakukan ini?
elisp
indentation
Maciej Goszczycki
sumber
sumber
electric-indent-mode
jauh lebih baik daripada memetakan<return>
kenewline-and-indent
Jawaban:
Alih-alih
mark-sexp
+indent-region
, Anda dapat menekanC-M-q
. Ini akan memanggilindent-pp-sexp
. Tidak otomatis, tetapi sedikit lebih baik daripada harus memanggil dua perintah.Atau jika Anda menggunakan
paredit-mode
, tekanM-q
. Itu akan reindent seluruh definisi fungsi Anda masuksumber
(add-hook 'post-self-insert-hook 'indent-pp-sexp)
bekerja dengan sangat baik.M-x sp-indent-defun
. Saya mengikat iniC-M-q
.Mode Indentasi Agresif
Karena beberapa orang memintanya, saya mengubah jawaban ini menjadi satu paket .
Jika Anda telah mengkonfigurasi Melpa, Anda dapat menginstalnya dengan
Lihat Readme untuk semua opsi, tetapi cara paling sederhana untuk menyalakannya adalah:
Jawaban Lama
Berikut ini melakukan indentasi otomatis hanya pada buffer elisp. Ini memiliki keuntungan juga bekerja ketika Anda menghapus atau menarik barang (bukan hanya mengetik). Sangat mudah untuk menambahkan ke mode lain juga.
Fungsi ini akan indentasi apa pun s-ekspresi titik saat ini di dalam Anda dapat mengikatnya ke kunci jika Anda mau, tetapi lihat di bawah terlebih dahulu.
Hook ini akan membuatnya sehingga fungsi ini akan berjalan setelah Anda mengetik apa pun, tetapi hanya di buffer elisp. Ini harus menjaga semuanya selalu menjorok ke dalam.
Cobalah! Ini bekerja dengan sangat baik.
Juga, mengikuti saran @ holocronweaver di komentar, Anda dapat menggunakan sesuatu seperti berikut untuk bahasa c-like:
sumber
Saya tidak tahu solusi yang sudah ada sebelumnya, tetapi Anda dapat menggunakannya
post-self-insert-hook
untuk menyelesaikannya sendiri:Saya akan khawatir tentang masalah kinerja potensial.
sumber
Anda dapat mencoba mode el-fly-indent , yang berperilaku lebih baik daripada
aggressive-indent-mode
ketika berurusan dengan Elisp.sumber