Digamos que eu tenha um código elisp como:
(+ 2 3▮(+ 3
4))
Existe uma maneira de recuar automaticamente o sexp após o cursor, quando adiciono ou removo símbolos?
Então, depois de pressionar SPC 4 SPC
, eu obteria automaticamente:
(+ 2 3 4 ▮(+ 3
4))
Eu posso fazer este manual chamando mark-sexp
seguido por indent-region
. Existem maneiras melhores de fazer isso?
elisp
indentation
Maciej Goszczycki
fonte
fonte
electric-indent-mode
é muito melhor do que o mapeamento<return>
paranewline-and-indent
Respostas:
Em vez de
mark-sexp
+indent-region
, você pode pressionarC-M-q
. Isso vai ligarindent-pp-sexp
. Não é automático, mas é um pouco melhor do que ter que chamar dois comandos.Ou, se você estiver usando
paredit-mode
, pressioneM-q
. Isso reindentará toda a definição de função em que você está.fonte
(add-hook 'post-self-insert-hook 'indent-pp-sexp)
funciona surpreendentemente bem.M-x sp-indent-defun
. Eu vinculo isso aC-M-q
.Modo de avanço agressivo
Como algumas pessoas pediram, eu transformei essa resposta em um pacote .
Se você tiver o Melpa configurado, poderá instalá-lo com
Consulte o Leia-me para obter todas as opções, mas a maneira mais simples de ativá-lo é:
A resposta antiga
A seguir, a indentação automática apenas nos buffers elisp. Tem a vantagem de também funcionar quando você apaga ou arranca coisas (em vez de apenas digitar). Também é fácil adicionar a outros modos.
Esta função irá indentar qualquer expressão s que o ponto esteja atualmente dentro. Você pode vinculá-lo a uma chave, se desejar, mas veja abaixo primeiro.
Esse gancho fará com que essa função seja executada após você digitar qualquer coisa, mas apenas nos buffers elisp. Isso deve manter tudo sempre recuado.
Tente! Funciona notavelmente bem.
Além disso, seguindo a sugestão de @ holocronweaver nos comentários, você pode usar algo como o seguinte para idiomas semelhantes a c:
fonte
Não conheço uma solução pré-existente, mas você pode usar
post-self-insert-hook
para fazer isso sozinho:Eu me preocuparia com possíveis problemas de desempenho.
fonte
Você pode experimentar o modo el-fly-indent , que é mais bem-comportado do que
aggressive-indent-mode
quando se lida com o Elisp.fonte