Necesito poder eliminar todos los comentarios de un búfer del código elisp. Por ahora, estoy usando:
(goto-char (point-min))
(comment-kill (count-lines (point-min) (point-max)))
Sin embargo, comment-kill
es una función interactiva, y su uso principal es eliminar un comentario a la vez. Además, tiene efectos secundarios visibles molestos, ya que agrega todos los comentarios que mató al anillo de exterminio.
¿Hay una función que permita eliminar (no matar) algunos o todos los comentarios de un búfer?
M-x flush-lines ^\s-*\/\/
o algo por el estilo. No es perfecto, pero podría funcionar algunas veces.Respuestas:
En general, no hay nada de malo en usar comandos como parte del código elisp. Esas funciones que solo están destinadas a un uso interactivo le (o deberían) advertir sobre eso. Ver
next-line
por ejemplo.Para eliminar, en lugar de matar, solo asegúrese de
kill-ring
que no haya cambiado:fuente
La respuesta de @ Malabarba parece la solución más simple y elegante. Sin embargo, si hace esto lo suficiente como para garantizar su propia función, también puede adaptarse
comment-kill
para eliminar sin modificar el anillo de matar. Aquí está el código fuente decomment-kill
con el cambio de una sola línea para definircomment-delete
:Y aquí hay una función (NB: mínimamente probada) que proporciona alguna funcionalidad adicional, que le permite eliminar comentarios en la línea actual, en la región activa o en todo el búfer:
No he verificado problemas de rendimiento, pero tal vez hay un pequeño golpe por no tocar el anillo de matar. De todos modos, dudo que note problemas de rendimiento a menos que esté trabajando con un búfer verdaderamente masivo. Pero como es poco probable que use esta función con mucha frecuencia, parece que no valdría la pena trabajar en la optimización.
fuente