Saya harus dapat menghapus semua komentar dari buffer dari kode elisp. Untuk saat ini, saya menggunakan:
(goto-char (point-min))
(comment-kill (count-lines (point-min) (point-max)))
Namun, comment-kill
adalah fungsi interaktif, dan penggunaan utamanya adalah untuk menghapus satu komentar pada suatu waktu. Selain itu, ia memiliki efek samping yang terlihat menyebalkan, karena ia menambahkan semua komentar yang dimatikannya ke cincin bunuh.
Apakah ada fungsi yang memungkinkan untuk menghapus (tidak membunuh) beberapa atau semua komentar dari buffer?
M-x flush-lines ^\s-*\/\/
sesuatu untuk itu. Tidak sempurna, tetapi bisa bekerja beberapa kali.Jawaban:
Secara umum, tidak ada yang salah dengan menggunakan perintah sebagai bagian dari kode elisp. Fungsi-fungsi yang hanya dimaksudkan untuk penggunaan interaktif akan (atau seharusnya) memperingatkan Anda tentang hal itu. Lihat
next-line
misalnya.Untuk menghapus, alih-alih membunuh, pastikan
kill-ring
tidak berubah:sumber
Jawaban @ Malabarba sepertinya solusi paling sederhana dan elegan. Namun, jika Anda melakukan ini cukup sehingga fungsinya terjamin, Anda juga dapat beradaptasi
comment-kill
untuk menghapus tanpa mengubah cincin bunuh. Berikut kode sumbercomment-kill
dengan perubahan satu baris untuk didefinisikancomment-delete
:Dan inilah fungsi (NB: minimal diuji) yang menyediakan beberapa fungsi tambahan, memungkinkan Anda untuk menghapus komentar pada baris saat ini, di wilayah aktif, atau di seluruh buffer:
Saya belum memeriksa masalah kinerja, tapi mungkin ada benjolan kecil karena tidak menyentuh cincin pembunuhan. Bagaimanapun, saya ragu Anda akan melihat masalah kinerja kecuali Anda bekerja dengan buffer yang benar-benar besar. Tetapi karena Anda tidak mungkin menggunakan fungsi ini sangat sering, sepertinya itu tidak akan sepadan dengan upaya untuk bekerja pada pengoptimalan.
sumber