A resposta de @ Malabarba parece a solução mais simples e elegante. No entanto, se você fizer isso o suficiente para garantir sua própria função, também poderá se adaptar comment-kill
à exclusão sem modificar o anel de morte. Aqui está o código fonte da
comment-kill
alteração de linha única para definir 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))))
E aqui está uma função (NB: minimamente testada) que fornece algumas funcionalidades adicionais, permitindo excluir comentários na linha atual, na região ativa ou em todo o 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)))))
Não verifiquei problemas de desempenho, mas talvez haja um pequeno inchaço por não tocar no anel de morte. Independentemente disso, duvido que você notará problemas de desempenho, a menos que esteja trabalhando com um buffer realmente grande. Mas como é improvável que você use essa função com muita frequência, parece que não valeria a pena o esforço de trabalhar na otimização.
M-x flush-lines ^\s-*\/\/
ou algo nesse sentido. Não é perfeito, mas pode funcionar algumas vezes.