J'ai besoin de pouvoir supprimer tous les commentaires d'un tampon du code elisp. Pour l'instant, j'utilise:
(goto-char (point-min))
(comment-kill (count-lines (point-min) (point-max)))
Cependant, comment-kill
est une fonction interactive, et son utilisation principale est de supprimer un commentaire à la fois. De plus, il a des effets secondaires visibles ennuyeux, car il ajoute tous les commentaires qu'il a tués à l'anneau de mise à mort.
Existe-t-il une fonction permettant de supprimer (pas de tuer) certains ou tous les commentaires d'un tampon?
M-x flush-lines ^\s-*\/\/
ou quelque chose à cet effet. Pas parfait, mais pourrait fonctionner quelques fois.Réponses:
En général, il n'y a rien de mal à utiliser des commandes dans le cadre du code elisp. Les fonctions qui sont uniquement destinées à une utilisation interactive vous (ou devraient) vous en avertir. Voir
next-line
par exemple.Afin de supprimer, au lieu de tuer, assurez-vous simplement que le
kill-ring
n'est pas modifié:la source
@ La réponse de Malabarba ressemble à la solution la plus simple et la plus élégante. Cependant, si vous faites cela suffisamment pour qu'il justifie sa propre fonction, vous pouvez également vous adapter
comment-kill
pour supprimer sans modifier le kill ring. Voici le code source decomment-kill
la modification sur une seule ligne à définircomment-delete
:Et voici une fonction (NB: testé de façon minimale) qui fournit des fonctionnalités supplémentaires, vous permettant de supprimer des commentaires sur la ligne actuelle, dans la région active ou dans le tampon entier:
Je n'ai pas vérifié les problèmes de performances, mais il y a peut-être une petite bosse de ne pas toucher l'anneau de destruction. Quoi qu'il en soit, je doute que vous remarquerez des problèmes de performances, sauf si vous travaillez avec un tampon vraiment massif. Mais comme il est peu probable que vous utilisiez cette fonction très fréquemment, il semble que cela ne vaut pas la peine de travailler sur l'optimisation.
la source