@ Odpowiedź Malabarby wygląda jak najprostsze i najbardziej eleganckie rozwiązanie. Jeśli jednak zrobisz to na tyle, że uzasadnia to swoją własną funkcję, możesz także dostosować się comment-kill
do usuwania bez modyfikowania pierścienia zabijania. Oto kod źródłowy
comment-kill
zmiany jednowierszowej w celu zdefiniowania 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))))
A oto funkcja (Uwaga: minimalnie przetestowana), która zapewnia dodatkowe funkcje, pozwalające na usuwanie komentarzy do bieżącego wiersza, w aktywnym regionie lub w całym buforze:
(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)))))
Nie sprawdziłem problemów z wydajnością, ale być może jest niewielka nierówność, jeśli nie dotkniesz pierścienia zabijania. Niezależnie od tego wątpię, czy zauważysz problemy z wydajnością, chyba że pracujesz z naprawdę ogromnym buforem. Ale ponieważ jest mało prawdopodobne, abyś często używał tej funkcji, wydaje się, że nie warto podejmować wysiłku przy optymalizacji.
M-x flush-lines ^\s-*\/\/
coś takiego. Nie idealnie, ale może działać czasami.