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 sumber
comment-kill
dengan perubahan satu baris untuk didefinisikan comment-delete
:
(defun comment-delete (arg)
"Delete the first comment on this line, if any. Don't touch
the kill ring. With prefix ARG, delete comments on that many
lines starting with this one."
(interactive "P")
(comment-normalize-vars)
(dotimes (_i (prefix-numeric-value arg))
(save-excursion
(beginning-of-line)
(let ((cs (comment-search-forward (line-end-position) t)))
(when cs
(goto-char cs)
(skip-syntax-backward " ")
(setq cs (point))
(comment-forward)
;; (kill-region cs (if (bolp) (1- (point)) (point))) ; original
(delete-region cs (if (bolp) (1- (point)) (point))) ; replace kill-region with delete-region
(indent-according-to-mode))))
(if arg (forward-line 1))))
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:
(defun comment-delete-dwim (beg end arg)
"Delete comments without touching the kill ring. With active
region, delete comments in region. With prefix, delete comments
in whole buffer. With neither, delete comments on current line."
(interactive "r\nP")
(let ((lines (cond (arg
(count-lines (point-min) (point-max)))
((region-active-p)
(count-lines beg end)))))
(save-excursion
(when lines
(goto-char (if arg (point-min) beg)))
(comment-delete (or lines 1)))))
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.
M-x flush-lines ^\s-*\/\/
sesuatu untuk itu. Tidak sempurna, tetapi bisa bekerja beberapa kali.