Ответ @ Малабарбы выглядит как самое простое и элегантное решение. Однако, если вы сделаете это достаточно для того, чтобы это оправдывало его собственную функцию, вы также можете адаптироваться comment-kill
к удалению без изменения списка уничтожений. Вот исходный код
comment-kill
с однострочным изменением для определения 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))))
А вот функция (примечание: минимально проверено), которая предоставляет некоторые дополнительные функции, позволяющие удалять комментарии в текущей строке, в активной области или во всем буфере:
(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)))))
Я не проверял проблемы с производительностью, но, возможно, есть небольшой удар от не касания кольца уничтожения. Несмотря на это, я сомневаюсь, что вы заметите проблемы с производительностью, если вы не работаете с действительно большим буфером. Но так как вы вряд ли будете использовать эту функцию очень часто, похоже, что не стоит тратить усилия на оптимизацию.
M-x flush-lines ^\s-*\/\/
или что-то на этот счет. Не идеально, но может работать несколько раз.