Muszę być w stanie usunąć wszystkie komentarze z bufora z kodu elisp. Na razie używam:
(goto-char (point-min))
(comment-kill (count-lines (point-min) (point-max)))
Jednak comment-kill
to interaktywna funkcja, a jego pierwotne zastosowanie to usunąć jeden komentarz na raz. Dodatkowo ma denerwujące widoczne efekty uboczne, ponieważ dodaje wszystkie zabite komentarze do pierścienia zabijania.
Czy jest funkcja pozwalająca usunąć (nie zabić) niektóre lub wszystkie komentarze z bufora?
M-x flush-lines ^\s-*\/\/
coś takiego. Nie idealnie, ale może działać czasami.Odpowiedzi:
Ogólnie rzecz biorąc, nie ma nic złego w używaniu poleceń jako części kodu elisp. Funkcje przeznaczone wyłącznie do użytku interaktywnego (lub powinny) ostrzec cię przed tym. Zobacz
next-line
na przykład.Aby usunąć, zamiast zabijać, upewnij się, że
kill-ring
nic się nie zmieniło:źródło
@ 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łowycomment-kill
zmiany jednowierszowej w celu zdefiniowaniacomment-delete
: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:
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.
źródło