Digamos que tengo un código elisp como:
(+ 2 3▮(+ 3
4))
¿Hay alguna forma de volver a sangrar automáticamente el sexp después del cursor cuando agrego o elimino símbolos?
Entonces, después de presionar SPC 4 SPC
, automáticamente obtendría:
(+ 2 3 4 ▮(+ 3
4))
Puedo hacer este manual llamando mark-sexp
seguido de indent-region
. ¿Hay mejores formas de hacer esto?
elisp
indentation
Maciej Goszczycki
fuente
fuente
electric-indent-mode
es mucho mejor que mapear<return>
anewline-and-indent
Respuestas:
En lugar de
mark-sexp
+indent-region
, puede presionarC-M-q
. Esto llamaráindent-pp-sexp
. No es automático, pero es un poco mejor que tener que invocar dos comandos.O si está usando
paredit-mode
, presioneM-q
. Eso reindentará toda la definición de función en la que se encuentra.fuente
(add-hook 'post-self-insert-hook 'indent-pp-sexp)
Funciona sorprendentemente bien.M-x sp-indent-defun
. Ato estoC-M-q
.Modo de sangría agresivo
Como algunas personas lo pidieron, convertí esta respuesta en un paquete .
Si tiene Melpa configurado, puede instalarlo con
Consulte el archivo Léame para ver todas las opciones, pero la forma más sencilla de activarlo es:
La vieja respuesta
Lo siguiente hace una sangría automática solo en los buffers de elisp. Tiene la ventaja de funcionar también cuando borra o tira cosas (en lugar de simplemente escribir). También es fácil agregar a otros modos.
Esta función sangrará cualquier expresión-s en la que se encuentre el punto actualmente. Puede vincularlo a una clave si lo desea, pero consulte a continuación primero.
Este enlace hará que esta función se ejecute después de escribir cualquier cosa, pero solo en búferes elisp. Esto debería mantener todo siempre sangrado.
¡Intentalo! Funciona notablemente bien.
Además, siguiendo la sugerencia de @ holocronweaver en los comentarios, puede usar algo como lo siguiente para lenguajes tipo c:
fuente
No conozco una solución preexistente, pero puede usarla
post-self-insert-hook
para lograrlo usted mismo:Sin embargo, me preocuparía por posibles problemas de rendimiento.
fuente
Puede probar el-fly-indent-mode , que se comporta mejor que
aggressive-indent-mode
cuando se trata de Elisp.fuente