Ich muss in der Lage sein, alle Kommentare aus einem Puffer aus dem Elisp-Code zu entfernen. Im Moment benutze ich:
(goto-char (point-min))
(comment-kill (count-lines (point-min) (point-max)))
Es handelt sich jedoch comment-kill
um eine interaktive Funktion, deren Hauptverwendung darin besteht, jeweils einen Kommentar zu löschen. Darüber hinaus hat es störende sichtbare Nebenwirkungen, da es alle Kommentare, die es getötet hat, zum Kill-Ring hinzufügt.
Gibt es eine Funktion, mit der einige oder alle Kommentare aus einem Puffer gelöscht (nicht getötet) werden können?
M-x flush-lines ^\s-*\/\/
oder etwas in diesem Sinne tun . Nicht perfekt, könnte aber manchmal funktionieren.Antworten:
Im Allgemeinen ist es nichts Falsches, Befehle als Teil des Elisp-Codes zu verwenden. Die Funktionen, die nur für den interaktiven Gebrauch bestimmt sind, werden (oder sollten) Sie davor warnen. Siehe
next-line
zum Beispiel.Um zu löschen, anstatt zu töten, stellen Sie einfach sicher, dass das
kill-ring
nicht geändert wird:quelle
@ Malabarbas Antwort scheint die einfachste und eleganteste Lösung zu sein. Wenn Sie dies jedoch so weit tun, dass eine eigene Funktion gewährleistet ist, können Sie sich auch
comment-kill
an das Löschen anpassen , ohne den Kill-Ring zu ändern. Hier ist der Quellcode voncomment-kill
mit der einzeiligen Änderung zu definierencomment-delete
:Und hier ist eine Funktion (NB: minimal getestet), die einige zusätzliche Funktionen bietet, mit denen Sie Kommentare in der aktuellen Zeile, im aktiven Bereich oder im gesamten Puffer löschen können:
Ich habe Leistungsprobleme nicht überprüft, aber vielleicht gibt es eine kleine Beule, wenn ich den Kill Ring nicht berühre. Unabhängig davon bezweifle ich, dass Sie Leistungsprobleme bemerken werden, wenn Sie nicht mit einem wirklich massiven Puffer arbeiten. Da es jedoch unwahrscheinlich ist, dass Sie diese Funktion sehr häufig verwenden, lohnt es sich anscheinend nicht, an der Optimierung zu arbeiten.
quelle