@ Malabarba'nın cevabı en basit ve zarif çözüm gibi görünüyor. Ancak, bunu kendi işlevini gerektirecek kadar yaparsanız comment-kill
, kill halkasını değiştirmeden silmeye de adapte olabilirsiniz . Tanımlamak comment-kill
için tek satırlı değişikliğin kaynak kodu
şöyledir 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))))
Ve işte, mevcut satırdaki, etkin bölgedeki veya tüm arabellekteki yorumları silmenize olanak tanıyan bazı ek işlevler sağlayan bir işlev (NB: minimal olarak test edilmiştir):
(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)))))
Performans sorunlarını kontrol etmedim, ama belki de öldürme halkasına dokunmamaktan küçük bir yumru var. Ne olursa olsun, gerçekten büyük bir tamponla çalışmadığınız sürece performans sorunlarını fark edeceğinizden şüpheliyim. Ancak bu işlevi çok sık kullanmanız mümkün olmadığından, optimizasyon üzerinde çalışmak için çaba göstermeye değmeyecek gibi görünüyor.
M-x flush-lines ^\s-*\/\/
şey yapabilirsiniz . Mükemmel değil, ama bazen işe yarayabilir.