Eu preciso ser capaz de remover todos os comentários de um buffer do código elisp. Por enquanto, estou usando:
(goto-char (point-min))
(comment-kill (count-lines (point-min) (point-max)))
No entanto, comment-kill
é uma função interativa e seu uso principal é excluir um comentário de cada vez. Além disso, tem efeitos colaterais visíveis irritantes, uma vez que adiciona todos os comentários que matou ao ringue.
Existe uma função que permita excluir (não matar) alguns ou todos os comentários de um buffer?
M-x flush-lines ^\s-*\/\/
ou algo nesse sentido. Não é perfeito, mas pode funcionar algumas vezes.Respostas:
Em geral, não há nada de errado em usar comandos como parte do código elisp. As funções destinadas apenas ao uso interativo o alertarão (ou deveriam) sobre isso. Veja
next-line
por exemplo.Para excluir, em vez de matar, verifique se
kill-ring
não mudou:fonte
A resposta de @ Malabarba parece a solução mais simples e elegante. No entanto, se você fizer isso o suficiente para garantir sua própria função, também poderá se adaptar
comment-kill
à exclusão sem modificar o anel de morte. Aqui está o código fonte dacomment-kill
alteração de linha única para definircomment-delete
:E aqui está uma função (NB: minimamente testada) que fornece algumas funcionalidades adicionais, permitindo excluir comentários na linha atual, na região ativa ou em todo o buffer:
Não verifiquei problemas de desempenho, mas talvez haja um pequeno inchaço por não tocar no anel de morte. Independentemente disso, duvido que você notará problemas de desempenho, a menos que esteja trabalhando com um buffer realmente grande. Mas como é improvável que você use essa função com muita frequência, parece que não valeria a pena o esforço de trabalhar na otimização.
fonte